Javascript Firebase+;主干:collection.create()和collection.push()之间的区别?

Javascript Firebase+;主干:collection.create()和collection.push()之间的区别?,javascript,firebase,backfire,Javascript,Firebase,Backfire,我发现在使用逆火的集合上使用create()和push()有区别,我想知道这是我的误解还是一个bug 我有一个动物模型和动物收藏如下。通常,使用包含zoo_id的选项对象创建集合,然后使用该对象在新模型中填充zoo_id。对于本例,它是一个固定值 var Animal = Backbone.Model.extend({ initialize: function(attributes, options) { console.log("model initializing

我发现在使用逆火的集合上使用create()和push()有区别,我想知道这是我的误解还是一个bug

我有一个动物模型和动物收藏如下。通常,使用包含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中有数据,则[]中检索到的所有动物模型都具有zoo_id=4,如预期的那样

当我推一个新模型时

a.push({name: "racoon"})
a.create({name: "ape"})
所有记录到控制台的属性对象都具有zoo_id=4。但是,返回的对象没有zoo_id,也没有Forge中新条目的zoo_id

当我创建一个新模型时

a.push({name: "racoon"})
a.create({name: "ape"})
登录到控制台的所有属性对象都具有zoo_id=4,返回的对象具有zoo_id=4,新条目具有zoo_id=4,并且处于伪造状态

如果我删除Firebase扩展并以相同的方式使用常规主干模型和集合,push返回一个带有zoo\u id的对象,create失败,因为没有设置url(如预期的那样)


提前感谢您的澄清

推送不是由回火API覆盖的功能的一部分。它与Backbone.Collection几乎遵循相同的契约。因此,
push
只是将一条记录附加到数组的末尾,而不将其同步到任何后端

您可能可以通过在
推送
之后调用
同步
来创建所需的行为,这通常与主干收集一样。我不确定该id在这里如何工作,您可能需要在对象上添加一个id,然后才能对其进行同步


但是,使用create/add可能是最简单的方法,它是回火API和处理服务器同步的一部分。

Kato-我们通过电子邮件讨论了这一点,我应该在您的建议下添加并打开github问题时关闭它:Push()只调用带有索引的add。add()和create()的工作方式不同。