Backbone,当你多次调用render()时会发生什么

时间:2013-11-14 08:39:13

标签: backbone.js

我听过人们在听模型更改时调用this.render()的例子。

initialize : function() {
    this.listenTo(this.model, "change:someAttribute", this.render());
    this.listenTo(this.model, "change:someOtherAttribute", this.render());
}

如果render()函数正在从某个下划线模板创建一个视图并将其附加到html文档,那么最初附加的现有HTML会发生什么?如果我在一个视图的字段中选择了下拉列表和一些文本,为什么在调用render()函数时它们不会重置为默认值?

1 个答案:

答案 0 :(得分:0)

你的DOM会发生什么取决于你在渲染方法中做了什么,如果你用

替换整个元素html
this.$el.html( _.template( htmlString, data ) );

如果你只是附加

this.$el.append( _.template( htmlString, data ) );

根据您设置应用程序的方式有不同的场景,但我认为您将主要使用render方法替换整个元素,然后您将有一个事件侦听器绑定到集合更改,例如,如果是模型添加到集合中,您将子视图附加到主视图el。

var view1 = Backbone.View.extend({
 el: '#view1div',
 initialize: function(){
  this.collection.bind('reset', this.render, this);
  this.collection.bind('add', this.addElement, this);
 },
 render: function(){
  this.$el.html( '<ul id="list"></ul>' );
 },
 addElement: function(){
  $('#list').append( '<li>something</li>' );
 }
});