2013-05-24 16 views
8

Ho un visualizzatore composito per un tavolo. Ho trigger definiti nel bambino ItemView per ogni riga ...I trigger ItemView scoppiano?

var TableRow = Marionette.ItemView.extend({ 
    tagName: "tr", 
    template: _.template($(TableTemplates).filter('#tableRow').html()), 
    triggers: { 
     "click td": "click:td" 
    } 
}); 

sono i trigger suppone che bolla fino al genitore CompositeView?

Da the docs ...

Avere accesso a questi [la vista, le proprietà del modello, e la raccolta di vista che hanno innescato l'evento] consente una maggiore flessibilità nella gestione di eventi da più punti di vista. Ad esempio, un controllo struttura a schede o un widget di espansione/compressione, ad esempio una barra del pannello, potrebbe attivare lo stesso evento da molte viste diverse e gestirlo con un'unica funzione.

La "funzione singola" non dovrebbe trovarsi all'interno del parametro CompositeView genitore in modo che possa reagire ai trigger di una qualsiasi delle sue ItemViews secondarie? In che modo CompositeView ascolta il trigger ItemView?

Grazie

risposta

14

Sì, si gonfiano.

L'unica cosa da tenere a mente è che quando un ItemView viene chiamato da un CompositeView o CollectionView, quel grilletto avrà itemview anteposto nel nome, in modo da:

click:td sarebbe ascoltare nel CompositeView come itemview:click:td

quella stringa può essere modificato in questo modo:

var CV = Marionette.CollectionView.extend({ 
    itemViewEventPrefix: "some:prefix" 
}); 

Così il trigger sarebbe some:prefix:click:td

EDIT: sulle versioni più recenti (non sono sicuro circa la versione di partenza), il prefisso itemview è stato modificato per childview

Maggiori informazioni qui:

Marionette docs

+1

Che cosa succede se si voleva far visualizzare a CompositeView tutti i suoi figli (ItemViews) per ascoltare uno dei suoi eventi? (Quindi l'opposto di avere il genitore ascolta i bambini) – Johannes

+1

puoi per favore mostrare nella tua risposta come posso ascoltare quell'evento? –

+0

@SandipArmalPatil Non è stato possibile ottenere questo risultato dagli eventi o dagli hash itemEvents, quindi alla fine ho inserito quanto segue nella mia funzione di inizializzazione: this.listenTo (this, "itemview: whatever", fn); – jackocnr

Problemi correlati