2011-08-12 10 views
7

Próbuję zbudować prostą aplikację do edytowania kontaktów w Backbone.js i natknąłem się na problem, którego nie potrafię rozwiązać, ponieważ nie znam jeszcze Backbone.js.Jak wyświetlić listę wyboru (dropdown) dla właściwości Model w BackboneJS?

Mam model Contact i ten element ma pole ProductLineID (każdy kontakt ma linię produktu, z którą jest powiązany). Wyświetlając edytor tego kontaktu, chciałbym wyświetlić listę rozwijaną z możliwymi opcjami ProductLine i ustawić ją na aktualną wartość. Jak to zrobić w Backbone.js?

wiem, jak to zrobić w knockout.js z wiązania danych:

<select id="ProductLineID" name="ProductLineID" 
     data-bind="options: productLineOptions, 
     optionsValue: 'ID', 
     optionsText: 'Name', 
     value: ProductLineID, 
     optionsCaption: 'All'"> 
</select> 

w tym przykładzie productLineOptions jest obiekt JSON, który jest już fabrycznie na stronie.

Osiągnęłoby to dokładnie to, czego chcę, ale nie wiem jak zrobić odpowiednik w Backbone.js.

Mogę dostarczyć więcej kodu z mojego rzeczywistego przykładu, ale wygląda na to, że jest to trochę trywialny przykład i nie wymaga określonego kodu.

+0

Czy udało się to osiągnąć? W jaki sposób udało Ci się pokazać 'Default Selected Value'', czyli' value: ProductLineID' ?? – Shubh

Odpowiedz

13

Coś jak poniżej będzie działać, jeśli jest używana underscore templates:

<select id="ProductLineID" name="ProductLineID"> 
    <option value="">--select a product line--</option> 
    <% _(productLineOptions).each(function(pl) { %> 
     <option value="<%= pl.ID %>"><%= pl.Name %></option> 
    <% }); %> 
</select> 

A potem po prostu trzeba upewnić się, że przeszedł w obiekcie do kontekstu szablonu productLineOptions.

+0

Czy istnieje sposób na połączenie tego z wbudowanym renderowaniem widoku w szkielecie? – samandmoore

+1

Wbudowany rendering widoku szkieletu nic nie robi, dosłownie. Możesz więc zrobić coś takiego: (1) umieść powyższe w szablonie (2) w swojej funkcji 'render' wywołaj szablon z poprawnym kontekstem' render: function() {this.template ({productLineOptions: productLineOptions}); zwróć to; } ' – satchmorun

+0

Mam inny problem, gdy dodałem atrybut" selected "do szablonu, ale zawsze wybiera on pierwszy, nawet jeśli wybrano inną opcję. – Kyleinincubator

4

Backbone.js nie wykonuje danych po wyjęciu z pudełka, podobnie jak Knockout. Pozostawia to ten aspekt twórcy do zrobienia, jak chcą. Podstawową metodą jest skonfigurowanie detektorów zdarzeń dla zmian.

Jeśli chcesz tworzyć wiązania stylu nokautowego, istnieje projekt, który może obsługiwać to, czego potrzebujesz.

https://github.com/derickbailey/backbone.modelbinding

+0

Rozumiem, że szkielet nie zapewnia tego samego typu funkcji wbudowanego wiązania danych, ale czy istnieje jakikolwiek sugerowany sposób osiągnięcia tego samego przy użyciu szkieletu? Prawdopodobnie wypróbuję plugin modelbinding, ale dla mnie to nie jest prawdziwie "szkieletowa" metoda jego wykonania. – samandmoore

Powiązane problemy