在学习 Backbone.js时,我正在使用与最新版本的 Backbone (0.9.2) 捆绑在一起的 Todos 示例应用程序。我的问题是,为什么应用程序在将模型添加到 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)时呈现,然后在底层模型发生变化时再次呈现。在这种情况下,什么都没有改变,但是 render 被调用了两次。
同样,我只是在学习 Backbone,所以我可能有一个基本的误解导致我的困惑。