我听过人们在听模型更改时调用this.render()的例子。
initialize : function() {
this.listenTo(this.model, "change:someAttribute", this.render());
this.listenTo(this.model, "change:someOtherAttribute", this.render());
}
如果render()函数正在从某个下划线模板创建一个视图并将其附加到html文档,那么最初附加的现有HTML会发生什么?如果我在一个视图的字段中选择了下拉列表和一些文本,为什么在调用render()函数时它们不会重置为默认值?
答案 0 :(得分:0)
你的DOM会发生什么取决于你在渲染方法中做了什么,如果你用
替换整个元素htmlthis.$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>' );
}
});