backbone.js - 在 Backbone.js 中绑定(bind)渲染回调

标签 backbone.js

根据Backbone.js文档:

Whenever a UI action causes an attribute of a model to change, the model triggers a "change" event; all the Views that display the model's data are notified of the event, causing them to re-render.



所以我想 render() 方法应该默认绑定(bind)到“更改”事件。但是以下代码不起作用:
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();

它仅在我添加显式绑定(bind)调用时才有效:
initialize: function() {
    this.model.bind('change', this.render, this);
}

这是否意味着我对默认 render() 回调的理解不正确,我们应该始终手动绑定(bind) render() 回调?

最佳答案

除非最近几个月发生了一些变化,否则就是这样。这是一件好事,因为它为何时渲染/重新渲染 View 提供了灵 active (例如,某些应用程序可能希望仅在模型被持久化在服务器上之后才渲染 View ,而不一定是当它在浏览器)。如果您希望您的 View 在模型属性更改时始终重新渲染,您可以使用您自己的基础 View 扩展默认主干 View ,该基础 View 将其渲染方法绑定(bind)到模型更改事件,然后从中扩展您的所有具体 View 。前任:

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'});

关于backbone.js - 在 Backbone.js 中绑定(bind)渲染回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8731915/

相关文章:

javascript - 在 JavaScript 中替换 Parse.Collections 的最佳方法是什么

backbone.js - 如何将参数传递给主干 Marionette 复合 View 模板

javascript - View 的哪个函数首先被执行?初始化还是渲染?

javascript - Backbone.js 路由器模式对浏览器 "back"按钮或直接导航的不同响应

javascript - Backbone Marionette 新架构与cdnJS

javascript - 无法更改 jquery 对象 css

javascript - 使用手动参数 FETCH 主干数据收集

javascript - 模型或 Backbone.js View 中的类私有(private)属性

javascript - 如何将 jQuery 触发事件传递给函数

javascript - 将 Javascript 框架与 Laravel 结合使用