2012-12-30 13 views
7

jestem dodanie ręcznie widok do elementu DOM w moim szablonu z następującego kodu:Czy można uniknąć dodawania domyślnego widoku elementu "div" podczas używania appendHtml() w marionetce?

appendHtml: function(collectionView, itemView, index){ 
     collectionView.$("ul#search_list_container").append(itemView.el); 
} 

w swoim szablonie mam:

<script id='search-list-grid-template' type='text/x-handlebars-template'> 
    <ul id="search_list_container"></ul> 
</script> 

Pomimo jestem dołączenie widok na ul # search_list_container mam div owijania domyślny szablon:

<div> 
    <ul id="search_list_container"> 
    <a href="#"> 
     <span id="search_list_item"> 
      id 
      invoice_number 
     </span> 
    </a> 
    </li> 
    </ul> 
</div> 

Czy istnieje sposób, aby uniknąć wyświetlania domyślnego znacznika „div” ?, nie mam z tym problemu ale ta wątpliwość zawsze przychodzi mi do głowy, gdy tylko wymyślę ten przykład.

Uwaga: Mam itemView dla ul compositeView, i kilka innych rzeczy nie pokazanych tutaj.

+1

możliwe duplikat [Extra div w itemviews i układów w Backbone.Marionette] (http: // stackoverflow.com/questions/11183130/extra-divs-in-itemviews-and-layouts-in-backbone-marionette) –

+0

dodatkowe duplikaty pytania: http://stackoverflow.com/questions/7663895/backbone-js-how-to -remove-extra-tag-in-view http://stackoverflow.com/questions/11195242/extra-wrappers-in-backbone-and-marionette są też dziesiątki innych, wszystkie z tym samym problemem i odpowiedzią: –

+0

I poczułem, że uzasadnia to odpowiedź z powodu szablonu kolekcji – MarkKGreenway

Odpowiedz

5

Kręgosłup Views zostały zaprojektowane tak, aby ich własny element DOM był przechowywany jako właściwość widoku el.

Nie zaleca się usuwania elementu widoku zgodnie z sugestią Stevena-Farleya, ponieważ zdarzenia mogą być z nim związane.

Najlepszym sposobem jest zmiana właściwości tagName swojej collectionView na ul.

Zobacz także: Extra divs in itemviews and layouts in Backbone.Marionette

+0

To nie działa, gdy element DOM, który chcesz wyrenderować, jest istniejącym regionem. Zakładki JQuery UI to przykład. Jeśli twój ul jest już w DOM (region renderowany dynamicznie), a następnie chcesz, aby li był renderowany bezpośrednio do niego (bez opakowania), ustawienie właściwości collectionView tagName nie będzie działać. Twoja kolekcja zostanie po prostu opakowana przez ten tag. Potrzebujemy czasami możliwości renderowania elementów bezpośrednio do istniejącego elementu. Dlaczego ta opcja nie jest już dostępna w Marionette 2.x? Była to opcja poprzez ustawienie właściwości elviewViewView w 1.x. Aktualizacja Post 2.x generuje błąd. – Robert

+0

HierarchyRequestError – Robert

+0

Moim pierwszym instynktem jest to, że region prawdopodobnie nie powinien być czymś tak specyficznym semantycznie jak znacznik "ul". Możesz uczynić region "div", mieć collectionView być "ul" i dzieci mogą znowu być "li". Nie jestem pewien aktualnego stanu w 2.x, ostatnio nie używałem szkieletu ani marionetki. –

1

Z jQuery można użyć .unwrap().

Spróbuj tego:

Zmiana:

collectionView.$("ul#search_list_container").append(itemView.el); 

Do:

collectionView.$("ul#search_list_container").append(itemView.el).unwrap(); 
+0

Czy to jest właściwy sposób rozwiązania tego problemu? Czy ma jakieś skutki uboczne? – Konza

1

kilka rzeczy o tym Collection View nie potrzebuje szablon,

to albo czyni

Albo
w zależności od tego, czy kolekcja ma coś czy nie.


To jest powiedziane, jeśli nie chcesz "div" w każdej pozycji. spróbuj dodanie

var yourItemView= Backbone.Marionette.ItemView.extend({ 
      tagName: "li", 
      //OTHER STUFF HERE 
      }); 

następnie zdjąć torebkę <li> z szablonu elementu.

Nie należy modyfikować appendHtml dla wszystkich w tym przypadku użycia.

Powiązane problemy