0
我是初級骨幹jj。我創建了一個信息視圖和消息視圖收集 像收藏取n * n視圖時只需要n
var MessageViewCollection = Backbone.View.extend({
initialize: function(options) {
this.options = options;
this.$el = $(options.el);
// this.render();
//this._addButton(this.options);
// this.model.on('change', this.render, this);
this.model.on('add', this.render, this);
this.model.on('remove', this.render, this);
// --> this.model is a collection : it has n models, which it fetches.
this.model.fetch({
success: function() {
console.log('Successfully fetched all messages');
},
error: function(err) {
console.log('Failed to fetch messages ' + err);
}
});
},
render: function() {
var self = this;
this.$el.html('');
// This button is getting rendered again ang again - can move the renderCollection.
this._addButton(this.options);
_.each(this.model.toArray(), function(message, i){
self.$el.append((new MessageView({model: message})).render().$el);
});
return this;
}
});
這種觀點是在開始呈現。我發現當它提取時,它有n個模型。對於每個模型,它創建一個MesageView
。但它似乎創建了n * n個消息視圖。 並且最後只有n被附加到DOM。
它們只是一個網絡調用,可以提取n個模型的集合。這似乎浪費了客戶端資源,內存,處理能力。
我認爲我正在傾聽'添加'到這個集合,這導致渲染每次被調用,它會添加到集合中。這是問題嗎?
我該如何解決這個問題?
如何將我處理刪除,創建一個新的函數讀取整個收集和_ .each增加了el。 ? –
爲此,我會傾聽** MessageView **內的'remove'事件,比如'this.listenTo(this.model,'remove',this.close,this);'然後您可以創建一個關閉函數你調用'this.remove();'和'this.unbind();'。 – Puigcerber