2015-10-21 24 views
0

我有一個Backbone視圖,我使用Handlebars在我的視圖中加載模板。渲染模板的一部分

我有一個列表#list在模板中必須在視圖中更新,然後它需要重新呈現。 我想重新渲染只有部分已經改變,所以只有#list沒有重新加載我所有的DOM(以及所有我所擁有的Handlebars助手)。

我嘗試這樣做:

template: Handlebars.compile(templateHtml), 

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

renderList: function() { 
    var html = this.template(this.model.toJSON()); 
    var selector = "#list"; 

    this.$el.find(selector).replaceWith($(selector, html)); 
} 

但這是非常緩慢的,因爲我覺得它重新呈現改變#list內容,因爲我需要之前的所有DOM。

有沒有更好的方法來做到這一點?

#list的內容放在另一個模板中並將其作爲subView加載它是一個好主意嗎? 在這種情況下,如何從第一個視圖觸發列表更新?

感謝

回答

1

最好是通過創建一個專門的渲染方法,這是我explained here更新您的渲染視圖的只是一部分。

在你的情況下,它看起來像你必須從模板構建整個html視圖,只是爲了更新它的一部分。如果你想將模板保存爲一個模板,這是很整潔的。

如果真的有很多的超越list模板怎麼回事,你可以在你的視圖中的兩個模板,一個將是一般的,而另一個只是列表中,您將安裝到第一個是全局渲染,能夠更新列表的好處。

此外,如果#list只是一個列表的容器,則可能甚至不需要第二個模板。我可以想象這可能是一個<ul>標記,您將在全局渲染過程中將其安裝在正確的位置,然後使用其他自定義渲染方法更新它。

而且,我寫到這裏的例子,這可能是你的情況可能有所幫助: Backbone.js fetch() JSON to model get() returnes undefined - 在本例中有一個模板,即對列表的容器,該列表是由它自己收集單獨管理。

只是有些想法。