2012-06-13 41 views
5

當我重新渲染骨幹視圖時,什麼是跳過重新渲染圖像和谷歌地圖等東西的好方法?每次重新呈現視圖時(很常見),我的照片和地圖視圖往往閃爍非常糟糕。特別是對於圖像,模板引擎正在從頭開始佈局佈局,這會導致圖像標記再次從服務器或緩存中獲取位圖。避免重新渲染骨幹視圖中的圖像和其他內容

當然,我仍然希望視圖對佈局保持不可知論的態度,所以在技術上它不應該知道我們要顯示圖像,對嗎?

+0

取決於你是如何呈現的圖像?您是使用車把還是僅僅將它們作爲文本插入? – jakee

+0

此時我正在使用鬍子,只需從數據模型中插入網址即可。我正想着在某個時候跳到車把。這會有幫助嗎? – preslavrachev

+0

你總是重新編譯你的模板嗎? – jakee

回答

9

我會提供一個解決方案,與您的假設衝突「視圖應該是模板不可知的」

如果調用render()任何時候任何的模式發生了變化,你就會有這種閃爍在瀏覽器中,特別是如果模板大。

我的建議是將視圖的render分開,只有當視圖第一次可視化時,纔會發生一次,並且有幾個update輔助方法負責更新鏈接到具體模型屬性的小塊視圖。

例如:

// code simplified and not tested 
var MyView = Backbone.View.extend({ 
    initialize: function(){ 
    this.model.on("change:title", this.updateTitle, this); 
    this.model.on("change:description", this.updateDescription, this); 
    // ... more change:XXX 
    }, 

    render: function(){ 
    this.$el.html(this.template(this.model.toJSON())); 
    }, 

    updateTitle: function(){ 
    this.$el.find(".title").html(this.model.get("title")); 
    }, 

    updateDescription: function(){ 
    this.$el.find(".description").html(this.model.get("description")); 
    }, 

    // ... more updateXXX() 
}) 
+1

這是真的,我一直在遵循這種方法很長一段時間......但越來越多我開始看到JS社區中的大牌建議明確區分問題......雖然技術上在JS中使用模板是仍然有點缺陷 – preslavrachev

+0

@ user1107412在_patterns_和_pragmatism_ :)之間總是存在一種持續的緊張關係(實用主義:根據他們的實際應用成功評估理論或信仰的方法_牛津英語詞典)。 – fguillen

+1

@ user1107412:您可以將視圖分解爲一組子視圖,然後根據需要讓小子視圖自行更新。這可能是毫無意義的迂腐,除非觀點已經太複雜了。 –

1

爲了獲得最佳效果,您確實不希望重新渲染包含媒體的HTML,因此我建議對更改的內容使用更多目標視圖,以便不需要重新呈現視圖內容沒有。