我是Backbone和Firebase的新手。我正在使用Backfire,有一个集合:
var UsersCollection = Backbone.Firebase.Collection.extend({
model: UserModel,
firebase: new Firebase( "https://xxxxxx.firebaseio.com/users" ),
});
模型本身与Firebase无关(正在创建“无效的Firebase参考创建”错误):
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()
应该明确表示某些内容已关闭:(
答案 0 :(得分:3)
在这种情况下,userRecord
变量返回为未定义,因为allUsers
集合尚未填充数据。当您拨打.findWhere()
时,数据仍会下载到Firebase。
为避免这种情况,您可以收听sync
事件并从那里执行所有操作。
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
事件来执行此操作。