2013-09-01 20 views
6

Czy można uzyskać ostatni obiekt z widoku szkieletowego CompositeView? Znalazłem dużo dokumentacji do uzyskania ostatniego modelu w kolekcji, ale nie tego ostatniego widoku w zbiorze widoków.Pobierz ostatni element z CompositeView w marionetce

Powodem, dla którego chciałbym to zrobić, jest to, że mogę renderować ostatni wiersz w tabeli nieco inaczej.

Poniżej znajduje się kod, którego używam teraz, działa dobrze, ale byłby mniej "hacky", gdybym mógł uzyskać prawidłowy obiekt z CompositeView, który go utworzył i wyrenderował. Używa jQuery do przeszukiwania całej części DOM zawartej przez CompositeView dla ostatniego elementu, a następnie manipuluje tym elementem.

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'); 
    } 
}); 

Dzięki!

Odpowiedz

10

Gdy kolekcja jest naciągane można dostać ostatnią pozycję w ten sposób:

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

niania wtyczka udostępnia wiele przydatnych metod dla Ciebie:

findByModel, findByCollection, findByCustom, findByIndex, findByCid

+0

Niesamowite, dziękuję bardzo! –

+0

Dokumentacja Backbone.BabySitter do wyszukiwania widoków z 'ChildViewContainer' (którego' .children' jest instancją): https://github.com/marionettejs/backbone.babysitter#retrieving-views – alxndr

+0

n.b. "CompositeView" Marionetki ma właściwość o nazwie '.childViewContainer', ale nie jest ona związana: marionetka oczekuje, że będzie to łańcuch selektora jQuery, którego użyje do określenia, gdzie umieścić instancje klasy' childView', którą tworzy. https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.compositeview.md#compositeviews-childviewcontainer – alxndr