javascript-在没有设置默认值的情况下在主干模型上声明变量
作者:互联网
我刚开始是骨干.js,我正在寻找一种无需提供默认值即可在模型上声明字段的方法.它实际上仅供参考,因此当我开始创建实例时,可以看到需要初始化哪些字段.
用像Java这样的东西
public class CartLine{
StockItem stockItem;
int quantity;
public int getPrice(){
return stockItem.getPrice() * quantity;
}
public int getStockID(){
//
}
}
但是,对于骨干模型,我引用的是方法中的字段,但实际上并未声明它们-看起来我可以轻松地创建一个不包含stockItem属性或数量属性的CartLine对象.声明对象时不提及字段,这很奇怪.特别是因为该对象应该表示服务器上的实体.
var CartLine = Backbone.Model.extend({
getStockID: function(){
return this.stockItem.id;
},
getTotalPrice: function() {
return this.quantity * this.StockItem.get('price');
}
});
我想我可以通过使用validate添加某种参考-
CartLine.validate = function(attrs){
if (!(attrs.stockItem instanceof StockItem)){
return "No Valid StockItem set";
}
if (typeof attrs.quantity !== 'number'){
return "No quantity set";
}
}
但是我的问题是-我错过了什么吗?是否为此建立了模式?
解决方法:
默认值实际上是“字段”或作为json的一部分从服务器来回传输的数据.
如果您只是想创建一些作为Model一部分的成员变量,这些成员变量是专有的并且不会被来回发送到服务器,则可以在对象本身上声明a)或在initialize方法中声明它们b)(在构建过程中调用),它们可以作为opts的一部分传递:
var Widget = Backbone.Model.extend({
widgetCount: 0,
defaults: {
id: null,
name: null
}
initialize: function(attr, opts) {
// attr contains the "fields" set on the model
// opts contains anything passed in after attr
// so we can do things like this
if( opts && opts.widgetCount ) {
this.widgetCount = opts.widgetCount;
}
}
});
var widget = new Widget({name: 'the blue one'}, {widgetCount: 20});
请记住,如果在类上声明对象或数组,则它们本质上是常量,更改它们将修改所有实例:
var Widget = Backbone.Model.extend({
someOpts: { one: 1, two: 2},
initialize: function(attr, opts) {
// this is probably not going to do what you want because it will
// modify `someOpts` for all Widget instances.
this.someOpts.one = opts.one;
}
});
标签:backbone-js,javascript 来源: https://codeday.me/bug/20191123/2066994.html