一種簡單demo:Backbone.View.setElement工作意外
this.listenTo(this.model, 'change', this.render);
然而儘管render
方法是:
var PersonListView = Backbone.View.extend({
initialize: function() {
this.listenTo(this.collection, 'add', this.addOne);
this.listenTo(this.collection, 'reset', this.addAll);
},
addOne: function (model) {
var subView = new PersonItemView({model: model});
$(this.el).append(subView.render().el);
},
addAll: function() {
$(this.el).empty();
this.collection.each(this.addOne, this);
},
render: function() {
this.addAll();
return this;
}
});
var PersonItemView = Backbone.View.extend({
template: _.template($('#tpl_person_item').html()),
initialize: function() {
this.listenTo(this.model, 'remove', this.remove);
this.listenTo(this.model, 'change', this.render);
},
render: function() {
console.info("render person:" + this.model.get("name"));
var el = $(this.template(this.model.toJSON()));
this.setElement(el);
return this;
}
});
var p = new Person({name: 'name1'});
var ps = new PersonList();
ps.add(p);
new PersonListView({
el: $("#list"),
collection: ps
}).render();
setTimeout(function() {
p.set("name", "new name")
}, 5000);
如圖所示,我通過change
事件模型的綁定到視圖稱爲元素不會更新到頁面。
看來setElement
不會將其el
添加到dom中。
如何解決這個問題?
我試圖避免刷新整個集合視圖一次只有一個項目進行更新。 – hguser 2015-01-21 07:00:24
@hguser已更新 – StateLess 2015-01-21 07:03:31