如果作为模型的属性传递,则不保存模型
我正在尝试创建一个Backbone应用程序而不使用全局集合变量。 这就是我的意思。 最初,我创建了一个模型,并将其添加到我的视图中的一个函数中
this.mymodel = new MyModel();
this.mymodel.addToCollection();
里面的addToCollection()
函数(称为对模型的实例),我增加了模型的实例(表示为this
),然后叫节省IT
addToCollection(){
mycollectionglobalvariable.add(this) //this global collection variable was created on application init
this.save();
}
在集合中,我将它设置为保存到localStorage,并且一切正常,但我不想为集合使用全局变量(主要是为了使测试更容易),所以在我的主视图中,我传递集合与集合属性(这意味着我将集合传递给主视图并将其设置为this.mycollection属性)
this.mymodel = new MyModel(collection: this.mycollection);
现在,在该模型的构造函数中,我设置了collection属性
constructor(options){
this.collection = options.collection;
}
和addToCollection方法现在是这样的
addToCollection(){
this.collection.add(this);
this.save();
}
结果是该模型被添加到集合中,但没有得到保存。 为什么模型在我作为模型的属性传递集合时未被保存?
您可以在Backbone文档中看到它支持将集合作为属性传递。
它看起来好像是简单地覆盖构造函数。 你也许应该调用默认的构造函数: Backbone.Model.apply(this, arguments);
。
不过,请查看模型构造函数的源代码:http://backbonejs.org/docs/backbone.html#section-53。 它已经将收集选项添加到模型中,因此您可以完全移除构造函数。
var Model = Backbone.Model = function(attributes, options) {
var attrs = attributes || {};
options || (options = {});
this.cid = _.uniqueId(this.cidPrefix);
this.attributes = {};
if (options.collection) this.collection = options.collection;
if (options.parse) attrs = this.parse(attrs, options) || {};
attrs = _.defaults({}, attrs, _.result(this, 'defaults'));
this.set(attrs, options);
this.changed = {};
this.initialize.apply(this, arguments);
};
最后,它可能只是一个错字,但是您应该将选项散列作为第二个参数传递给您的模型。
this.mymodel = new MyModel({}, {collection: this.mycollection});
看看这个jsfiddle的例子:http://jsfiddle.net/mfze3abg/
链接地址: http://www.djcxy.com/p/67147.html上一篇: collection not saving model if passed as property of model