基本上我想要这个设置:
var Game = Backbone.Model.extend({
defaults: {
},
autoSync: true
});
var Games = Backbone.Firebase.Collection.extend({
url: 'https://<myapp>.firebaseio.com/games',
autoSync: false,
model: Game
});
每个游戏都应该与服务器数据自动同步,但我不想听整个child_ * Firebase系列事件。目标是更新单个项目视图,而不是重新绘制整个列表。
亲切的问候那些人和快乐的编码;)
答案 0 :(得分:2)
您可以使用启用了Backbone.Firebase.Collection
的{{1}}来更新单个项目。要重新渲染单个项目,您需要在项目触发更改事件时收听。此概念显示在Firebase文档中的BackboneFire快速入门中。
但请注意,您不能将autoSync
与Backbone.Firebase.Model
混合使用。
Todo Model&amp;集合强>
在下面的示例中,请注意Backbone.Firebase.Collection
中常规Backbone.Model
的使用方式。默认情况下,该集合已启用Backbone.Firebase.Collection
。
autoSync
Todo View
以下示例是单个待办事项的视图。在// A simple todo model
var Todo = Backbone.Model.extend({
defaults: { title: "New Todo" }
});
// Create a Firebase collection and set the 'firebase' property
// to the URL of your Firebase
var TodoCollection = Backbone.Firebase.Collection.extend({
model: Todo,
url: "https://<your-firebase>.firebaseio.com"
});
函数内部,initialize
方法用于侦听模型的listenTo
事件。每次远程或本地更新模型时都会触发change
事件(远程持续更改)。
change
呈现列表
设置// A view for an individual todo item
var TodoView = Backbone.View.extend({
tagName: "li",
template: _.template("<%= title %>"),
initialize: function() {
// whenever the model changes trigger a re-render of the single view
this.listenTo(this.model, "change", this.render);
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
},
});
后,列表也可以轻松呈现。在下面TodoView
的{{1}}函数中,我们会收听initialize
AppView
。只要将项添加到集合中,就会执行collection
函数。 TodoCollection
功能只是向页面添加新的addOne
。
addOne