2012-08-29 94 views
2

我正在爲iPad構建一個web應用程序,最近我在某些性能問題上運行。我在左邊有一個新聞列表,右邊是一個新聞視圖。當你點擊一條新聞時,它會顯示正確的消息。Backbone.js - 更新視圖與渲染新視圖

目前,我每次點擊新聞時都會生成一個新視圖。現在我的視圖模板對於每個新聞都保持不變,並且我想知道如果只更新所選新聞內容右側的視圖,而不是每次生成新的視圖,我是否會獲得更好的性能。

如果是這樣,是否有更新視圖與新的模型數據或只是簡單的jQuery的骨幹方式?

+0

這方面有趣的文章:http://ianstormtaylor.com/break-apart-your-backbonejs-render-methods/ – stusmith

回答

0

可以像這樣簡單的事情:

// code no tested 
var NewsView = Backbone.View.extend({ 
    changeCollection: function(collection){ 
    this.collection = collection; 
    this.render(); 
    } 
}); 
1

至於性能也越高,是否支付給剛剛更新它的部分將很可能取決於你的觀點的複雜程度,又有多少被改變。

這就是說,你可以有一個視圖你右手邊的新項目,然後只要將它的模型和triggerchange 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)並附加新選擇的模型的視圖。