我正在使用 Todos 示例应用程序与最新版本的 Backbone 捆绑在一起(0.9.2) 在学习 Backbone.js 时。我的问题是,为什么应用程序设计为在将模型添加到 Todos 集合时触发渲染事件两次?
如果我将此行放在 TodoView 的渲染函数中:
// Re-render the titles of the todo item.
render: function() {
console.log("Rendering!");
this.$el.html(this.template(this.model.toJSON()));
然后“渲染!”在控制台中出现两次。我理解这是因为视图将模型的更改事件绑定到视图的渲染:
initialize: function() {
this.model.bind('change', this.render, this);
并且在addOne中调用render,它绑定到Todos的add事件:
addOne: function(todo) {
var view = new TodoView({model: todo});
this.$("#todo-list").append(view.render().el);
},
但这是双重渲染设计的标准做法吗?看起来视图应该在创建时渲染(或进入 DOM),然后在底层模型发生变化时再次渲染。在这种情况下,没有任何更改,但渲染被调用了两次。
再说一次,我刚刚学习 Backbone,所以我可能有一个基本的误解,导致我的困惑。