在Backbone.js中绑定渲染回调

gri*_*igy 6 backbone.js

根据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()回调?

rr.*_*rr. 6

除非过去几个月发生了变化,否则就是这种情况.这是一件好事,因为它提供了关于何时呈现/重新呈现视图的灵活性(例如,某些应用程序可能只想在模型已经保留在服务器上之后呈现视图,而不一定在它发生变化时浏览器).如果希望在模型属性更改时始终重新呈现视图,则可以使用自己的基本视图扩展默认主干视图,该基础视图将其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)