我正在爲iPad構建一個web應用程序,最近我在某些性能問題上運行。我在左邊有一個新聞列表,右邊是一個新聞視圖。當你點擊一條新聞時,它會顯示正確的消息。Backbone.js - 更新視圖與渲染新視圖
目前,我每次點擊新聞時都會生成一個新視圖。現在我的視圖模板對於每個新聞都保持不變,並且我想知道如果只更新所選新聞內容右側的視圖,而不是每次生成新的視圖,我是否會獲得更好的性能。
如果是這樣,是否有更新視圖與新的模型數據或只是簡單的jQuery的骨幹方式?
我正在爲iPad構建一個web應用程序,最近我在某些性能問題上運行。我在左邊有一個新聞列表,右邊是一個新聞視圖。當你點擊一條新聞時,它會顯示正確的消息。Backbone.js - 更新視圖與渲染新視圖
目前,我每次點擊新聞時都會生成一個新視圖。現在我的視圖模板對於每個新聞都保持不變,並且我想知道如果只更新所選新聞內容右側的視圖,而不是每次生成新的視圖,我是否會獲得更好的性能。
如果是這樣,是否有更新視圖與新的模型數據或只是簡單的jQuery的骨幹方式?
可以像這樣簡單的事情:
// code no tested
var NewsView = Backbone.View.extend({
changeCollection: function(collection){
this.collection = collection;
this.render();
}
});
至於性能也越高,是否支付給剛剛更新它的部分將很可能取決於你的觀點的複雜程度,又有多少被改變。
這就是說,你可以有一個視圖你右手邊的新項目,然後只要將它的模型和trigger
的change event
或致電視圖中的refresh
方法。像
var NewsItemView = BackBone.View.extend({
initialize: function() {
this.model.bind('change', this.refresh, this);
},
refresh: function() {
this.$el.find('#partIWantToUpdate').html(this.model.get('someField'));
}
})
然後東西,而然後創建一個新的視圖,你只要將它的模型
newItemView.model = newsModel;
newsModel.trigger('change');
或者乾脆忘掉結合change事件並調用方法直接
newItemView.refresh();
另一種選擇是,您可以爲每個新聞項目創建一個視圖,並在您的收藏視圖中緩存該視圖,然後每次點擊新聞項目時您都可以使用detach
(這是importa nt,你detach
,而不是remove
作爲刪除也將刪除任何綁定事件)當前視圖從DOM
(以及當前視圖的el
)並附加新選擇的模型的視圖。
這方面有趣的文章:http://ianstormtaylor.com/break-apart-your-backbonejs-render-methods/ – stusmith