2013-09-01 10 views
6

È possibile ottenere l'ultimo ItemView da un Backbone CompositeView? Ho trovato molta documentazione per ottenere l'ultimo modello in una raccolta, ma non quell'ultima vista in una raccolta di viste.Ottieni la vista dell'ultimo elemento da CompositeView in Marionette

La ragione per cui vorrei farlo è che posso rendere l'ultima riga in una tabella leggermente diversa.

Quanto segue è il codice che sto usando in questo momento, funziona bene, ma sarebbe meno "hacky" se potessi ottenere il ItemView corretto da CompositeView che lo ha creato e reso. Usa jQuery per cercare l'intera parte del DOM contenuta da CompositeView per l'ultimo elemento, quindi manipola quell'elemento.

B.ListControl.View = Backbone.Marionette.CompositeView.extend({ 
    itemView: ..., 
    itemViewContainer: ..., 
    template: ..., 
    // ON RENDER 
    onRender: function(){ 
     // Add button to the last element in the list 
     this.$el.find('div:last').text('Custome stuff goes here'); 
    } 
}); 

Grazie!

risposta

10

Quando la collezione è inverosimile è possibile ottenere ultima voce in questo modo:

this.children.findByIndex(this.children.length - 1); 

Babysitter plugin fornisce un sacco di metodi utili per voi:

findByModel, findByCollection, findByCustom, findByIndex, findByCid

+0

Fantastico, grazie mille! –

+0

Documentazione Backbone.BabySitter per la ricerca di viste da un 'ChildViewContainer' (che' .children' è un'istanza di): https://github.com/marionettejs/backbone.babysitter#retrieving-views – alxndr

+0

n.b. 'CompositeView' della marionetta ha una proprietà chiamata' .childViewContainer' ma non è correlata: Marionette si aspetta che sia una stringa di selettore jQuery che userà per determinare dove mettere le istanze della classe 'childView' che produce. https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.compositeview.md#compositeviews-childviewcontainer – alxndr

Problemi correlati