2012-04-25 25 views
6

我試圖呈現在集合開始一個項目(想象一下,如果你是一個發佈在Facebook上新記錄)骨幹網(木偶一樣)試圖顯示在集合開始一個新的記錄,不重 - 渲染整個集合

當我來添加(響應,在{0});進入集合,記錄被正確地插入到集合中,但是被呈現在項目列表的底部。我很困惑,因爲我之前有這個工作,但我認爲我在做一個黑客風格,只是重新設置和重新渲染集合。

我想知道什麼整潔的方式來處理這個問題,我應該在哪裏綁定的邏輯。

它是不是在集合的add方法?目前這是空的(但我正在使用Marionette),我覺得這覆蓋了主幹的默認渲染。如何再次控制它,這樣我就可以正確地將我的新項目添加到列表中,而不會將其全部摧毀並重新創建。

回答

12

在木偶的默認方式爲新項目的意見添加到集合,是使用jQuery的append方法。 CollectionView類型有一個名爲appendHtml的方法,用於執行實際的附加操作。 (請參閱http://derickbailey.github.com/backbone.marionette/docs/backbone.marionette.html#section-24

儘管如此,您可以輕鬆地在特定的集合視圖中重寫此方法,並在需要的任何地方附加新模型。

在你的情況,如果你總是想在前面加上了新的模式,以列表的頂部,這是非常微不足道的改變您的收藏視圖做到這一點:

Backbone.Marionette.CollectionView.extend({ 
    appendHtml: function(cv, iv){ 
    cv.$el.prepend(iv.el); 
    } 
}); 

注意cv是集視圖實例和iv是集合中模型的項目視圖實例。

如果您需要做更復雜的事情,比如在現有的HTML節點集合中找到確切的位置,您也可以在appendHtml函數中執行此操作。當然這比僅僅做一個前綴而不是一個追加更復雜,但它仍然是可能的。

希望有所幫助。

+0

感謝您的迴應,絕對認爲這將會有用的前進! – 2012-04-26 09:42:22

+0

@ChrisBarry也看到https://github.com/derickbailey/backbone.marionette/issues/78線程的方式插入,爲了一個項目成呈現集合。 – 2012-05-09 05:30:24

+0

但是用prepend替換append會改變渲染時的順序,不是嗎? – Herokiller 2014-02-04 13:05:07