0

早上好!Marionette.ItemView渲染事件

我很難解釋我在找什麼,所以我將從代碼開始。

我有木偶看法是這樣的:

Marionette.ItemView.extend({ 
    model: new Models.Cards(), 
    template: 'poker/cards', 
    events: { 
     'click player': 'playerClicked' 
    }, 
    playerClicked: function(e) { 
     // THIS WORKS! 
    } 
} 

如何我可以做這樣的事情:

events: { 
     'click player': 'playerClicked', 
     'render player': 'playerRendered' 
    }, 

使playerRendered<player>呈現被稱爲?

+0

你能擴大你的問題,包括有關的詳細信息這裏發生了什麼,這些對象是什麼,以及它們如何相互作用? – Yura

回答

1

如果您希望在ItemView本身呈現運行一些代碼,使用onRender

Marionette.ItemView.extend({ 
    // ... 
    onRender: function() { 
    console.log("Rendered the ItemView!") 
    } 
    //... 
}) 

木偶不具有內置的事件ItemView正在呈現。

+0

如果我有這個模板:{#myplayers} {/ myplayers} - 所以,玩家列表,'onRender'將在整個列表呈現時調用。我想在單人玩家項目呈現時捕捉事件 –

+0

換句話說。在渲染過程中,我需要在少數玩家(不是每個人)中改變CSS。只有少數特定的球員。這就是爲什麼我需要單個玩家呈現事件,而不是整個列表 –

+0

在這種情況下,您應該使用一個CollectionView,它爲每個玩家呈現一個ItemView。 – joews

1

@joews是對的。如果你想對你正在呈現的ItemView的特定片段做出反應,你應該對整個ItemView的render事件作出反應。當您渲染一個ItemView時,它會將整個模板呈現在內存中,然後將它作爲一個整體附加到DOM中。如果你想渲染一個模型集合,那麼你可以使用一個集合視圖,每個ItemView將被獨立渲染。

如果你想與CollectionViews和CompositeViews設立觀點的例子檢查出呈現四手的五張牌,所有的卡有隨機值這個小提琴:http://jsfiddle.net/kjdgygy5/