gpt4 book ai didi

backbone.js - Backbone 初始化: function( options ) not working in V9

转载 作者:行者123 更新时间:2023-12-03 18:43:54 25 4
gpt4 key购买 nike

我刚刚将工作的站点从Backbone.js 0.5.3升级到Backbone.js 0.9.2
当我这样做时,我在模型的initialize方法中使用的options参数得到了一个未定义的信息。从V.5到V.9的变化

初始化:函数(选项){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();

在版本0.5.3中,选项将显示在默认对象中设置的所有属性。
但在0.9.2版中,此功能不再起作用,它将返回undefined。
由于客户端敏感,我无法发布链接。

最佳答案

我相信initialize的签名保持不变,从0.5到0.9。但是,只有将选项传递给构造函数时,才会传递这些选项。 checkout annotated source for Backbone.Model。每当您实例化一个新的模型实例时,构造函数都会这样做:

this.initialize.apply(this, arguments);

因此,无论您传递给构造函数的是什么,都将原封不动地传递给初始化。因此,请在代码中查找实例化新模型实例但不传递2个参数(属性和选项)的情况。

根据您的代码示例,您现在需要将 initialize定义为采用2个参数: attributesoptions,并且在创建模型时,如果您只想传递选项,请执行以下操作:
var model = new Model(null, options);

或者
var model = new Model({}, options);

我认为破坏您代码的具体更改是从调用带有0.5.3中的显式参数的initialize到使用0.9.3中的apply和arguments的切换,如下所示:
    this.initialize.apply(this, arguments);

因此,在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();

由于参数为空,由于未将任何内容传递给构造函数,因此未定义属性,因此将记录 [], undefined, Object,但是已在 this.attributes中设置了默认值,您可以在其中使用。

关于backbone.js - Backbone 初始化: function( options ) not working in V9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10356256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com