我发现在使用 Backfire 的集合上使用 create() 和 push() 有所不同,我想知道这是我的误解还是错误。
我有一个动物模型和动物集合,如下所示。通常,该集合是使用包含 zoo_id 的选项对象创建的,然后用于在新模型中填充 zoo_id。对于此示例,这是一个固定值。
var Animal = Backbone.Model.extend({
initialize: function(attributes, options) {
console.log("model initializing", attributes, options)
}
}),
Animals = Backbone.Firebase.Collection.extend({
firebase: myFirebaseUrl + "/animal",
initialize: function(models, options) {
this.model = function(attrs, opts) {
return new Animal(_.extend(attrs, {zoo_id: 4}))
};
this.on("add", function(model, collection, options) {
console.log("adding", model, collection, options, model.attributes)
})
}
})
var a= new Animals()
如果 Firebase 中有数据,则 a[] 中检索到的所有动物模型的 zoo_id = 4,正如预期的那样。
当我推新模型时
a.push({name: "racoon"})
所有记录到控制台的属性对象都有 zoo_id = 4。但是,返回的对象没有 zoo_id,Forge 中的新条目也不存在 zoo_id。
当我创建一个新模型时
a.create({name: "ape"})
记录到控制台的所有属性对象都具有 zoo_id = 4,返回的对象具有 zoo_id = 4,并且具有 zoo_id = 4 的新条目在 Forge 中。
如果我删除 Firebase 扩展并以相同的方式使用常规 Backbone 模型和集合,则push返回一个带有 zoo_id 的对象,并且由于没有设置 url(如预期的那样)而创建失败。
提前感谢您的澄清!