Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在主干模型上声明变量而不设置默认值_Javascript_Backbone.js - Fatal编程技术网

Javascript 在主干模型上声明变量而不设置默认值

Javascript 在主干模型上声明变量而不设置默认值,javascript,backbone.js,Javascript,Backbone.js,我刚开始使用backbone.js,我正在寻找一种在模型上声明字段而不必提供默认值的方法。它实际上只是作为参考,所以当我开始创建实例时,我可以看到需要初始化哪些字段 我会用java之类的东西来写 public class CartLine{ StockItem stockItem; int quantity; public int getPrice(){ return stockItem.getPrice() * quantity; }

我刚开始使用backbone.js,我正在寻找一种在模型上声明字段而不必提供默认值的方法。它实际上只是作为参考,所以当我开始创建实例时,我可以看到需要初始化哪些字段

我会用java之类的东西来写

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“类”中声明私有或公共变量