2

我是 Backbone 和 Firebase 的新手。我正在使用 Backfire,有一个集合:

var UsersCollection = Backbone.Firebase.Collection.extend({
    model: UserModel,
    firebase: new Firebase( "https://xxxxxx.firebaseio.com/users" ),
});

模型本身与 Firebase 无关(出现“Invalid Firebase reference created”错误):

var UserModel = Backbone.Model.extend({
    defaults: function() {
        return {
            email: "example@example.com"
        };
    }
});

在我的视图中,我实例化了集合,我得到了正确的数据,我可以将新模型添加到集合中,如下所示:

this.allUsers  = new UsersCollection();
...
this.allUsers.add( userData );

效果很好,新的用户记录出现在 Firebase 上。但是,假设我现在想要获取给定用户的模型并更新其数据:

var userRecord = this.allUsers.findWhere( {email: email} );
userRecord.set( {age: age} );

这会在本地更新模型,但更改后的模型不会同步到 Firebase。我后来尝试过userRecord.save();,但它触发了“循环引用”错误。根据文档,set()应该清楚地做到这一点:(

4

1 回答 1

3

在这种情况下,该userRecord变量返回为未定义,因为该allUsers集合尚未填充数据。当您调用时,数据仍在下载到 Firebase .findWhere()

为避免这种情况,您可以收听sync事件并从那里执行所有操作。

JSBin 示例

allUsers.on('sync', function(collection) {
  // collection is allUsers
  var userRecord = collection.findWhere( {email: 'david@email.com'} );
  userRecord.on('change', function(model) {
     console.log('changed', model);
  });
  userRecord.set( {age:4} );
});

您需要确保在处理对它们的任何操作之前填充您的集合。该sync事件是执行此操作的推荐方式。

于 2014-11-21T19:21:27.687 回答