我只是将我工作的网站从Backbone.js 0.5.3升级到Backbone.js 0.9.2当我这样做时,我得到了一个未定义的我在我的模型初始化方法中使用的选项参数.从V.5到V.9的变化是什么
initialize:function(options){ enter code here
}
好的,这是我的模型结构.在0.5.3中一切正常,但是当我使用0.9.2时,选项不再有效.
this.myModel = Backbone.Model.extend({
defaults: function() {
return {
maxDays: 7,
index: 0
};
},
initialize: function( options ) {
}
})
this.model = new myModel();
Run Code Online (Sandbox Code Playgroud)
在版本0.5.3中,选项将显示在defaults对象中设置的所有属性.但在版本0.9.2中,这不再有效,它返回undefined.由于客户端的敏感性,我无法发布链接.
Pet*_*ons 15
初始化的签名保持不变,我认为从0.5到0.9.但是,如果将它们传递给构造函数,则只能获取传入的选项.查看Backbone.Model的带注释的源代码.每当您实例化一个新的模型实例时,构造函数都会这样做:
this.initialize.apply(this, arguments);
Run Code Online (Sandbox Code Playgroud)
所以无论你传递给构造函数的是什么都未经修改地传递给初始化.因此,请查看代码,了解实例化新模型实例但不传递2个参数(属性和选项)的情况.
基于您的代码示例,您现在需要定义initialize为服用2个参数:attributes和options和创建你的模型,如果你只想通过选择时做到:
var model = new Model(null, options);
Run Code Online (Sandbox Code Playgroud)
要么
var model = new Model({}, options);
Run Code Online (Sandbox Code Playgroud)
我认为破坏你的代码的具体变化是从使用0.5.3中的显式参数调用initialize到使用0.9.3中的apply和arguments这样的转换:
this.initialize.apply(this, arguments);
Run Code Online (Sandbox Code Playgroud)
因此,在0.9中,您可以访问默认值this.attributes,但它们不会作为函数参数出现,除非它们作为构造函数的参数.
var MyModel = Backbone.Model.extend({
defaults: {x: 42, y: 43},
initialize: function(attributes, options) {
console.log(arguments, attributes, this.attributes);}
});
var m = new MyModel();
Run Code Online (Sandbox Code Playgroud)
这将记录,[], undefined, Object因为参数是空的,属性是未定义的,因为没有任何内容传递给构造函数,但是默认值已经设置this.attributes并且可供您使用.