Javascript 在主干模型上声明变量而不设置默认值
我刚开始使用backbone.js,我正在寻找一种在模型上声明字段而不必提供默认值的方法。它实际上只是作为参考,所以当我开始创建实例时,我可以看到需要初始化哪些字段 我会用java之类的东西来写Javascript 在主干模型上声明变量而不设置默认值,javascript,backbone.js,Javascript,Backbone.js,我刚开始使用backbone.js,我正在寻找一种在模型上声明字段而不必提供默认值的方法。它实际上只是作为参考,所以当我开始创建实例时,我可以看到需要初始化哪些字段 我会用java之类的东西来写 public class CartLine{ StockItem stockItem; int quantity; public int getPrice(){ return stockItem.getPrice() * quantity; }
public class CartLine{
StockItem stockItem;
int quantity;
public int getPrice(){
return stockItem.getPrice() * quantity;
}
public int getStockID(){
//
}
}
然而,对于主干模型,我引用了方法中的字段,但实际上并没有声明它们-看起来我可以轻松创建一个CartLine
对象,该对象不包含stockItem
属性或quantity
属性。当我声明对象时,不提字段感觉很奇怪。特别是当对象应该表示服务器上的实体时
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的一部分从服务器来回传输的数据 如果您只想创建一些成员变量作为模型的一部分,这些变量是专有的,不会来回发送到服务器,那么您可以在对象本身上声明它们a)或在方法中声明它们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;
}
});
Jsdoc/评论?如果我不只是将默认值设置为
null
,那么我就会使用它。模型会保存给定资源的URL,并且您可以根据需要构造请求数据。为什么要声明没有默认值的变量?无论如何,您可以声明变量,比如在javascript“类”中声明私有或公共变量