根据Backbone.js文档:
每当UI动作导致模型的属性发生变化时,模型就会触发"更改"事件; 显示模型数据的所有视图都会被通知事件,从而导致它们重新渲染.
所以我认为默认情况下应该将render()方法绑定到"change"事件.但是,以下代码不起作用:
TestModel = Backbone.Model.extend({});
TestView = Backbone.View.extend({
render: function() {
alert('render called');
}
});
var mod = new TestModel;
var view = new TestView({model:mod});
mod.change();
Run Code Online (Sandbox Code Playgroud)
它只有在我添加显式绑定调用时才有效:
initialize: function() {
this.model.bind('change', this.render, this);
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着我对默认的render()回调的理解不正确,我们应该总是手动绑定render()回调?
除非过去几个月发生了变化,否则就是这种情况.这是一件好事,因为它提供了关于何时呈现/重新呈现视图的灵活性(例如,某些应用程序可能只想在模型已经保留在服务器上之后呈现视图,而不一定在它发生变化时浏览器).如果希望在模型属性更改时始终重新呈现视图,则可以使用自己的基本视图扩展默认主干视图,该基础视图将其render方法绑定到模型更改事件,然后从中扩展所有具体视图.例如:
MyView = Backbone.View.extend({
initialize: function() {
Backbone.View.prototype.initialize.apply(this, arguments);
this.model.bind('change', this.render);
}
});
MyConcreteView = MyView.extend({...});
var model = new Backbone.Model({...});
var view = new MyConcreteView({model: model});
model.set({prop: 'value'});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8442 次 |
最近记录: |