Próbuję wykonać pewne skomplikowane powiązanie z nokautem (przynajmniej dla początkującego takiego jak ja).knockout.js wiązanie rekursywne
Rozważmy następujące dane:
var originalData = {
id: 1,
name: "Main",
children: [ { id: 2, name: "bob", children: []}, { id: 3, name: "ted", children: [{id: 5, name:"albert"}, {id: 9, name: "fred"}]} ],
selectedChild: { id: 2, name: "bob" }
};
<table>
<tr>
<td data-bind="text: name"></td>
</tr>
<tr data-bind="if: children().length > 0">
<td>
<select data-bind="options: children,
optionsText: function(item){
return item.name;
},
optionsCaption: 'Choose...'"></select>
</td>
</tr>
Ok, to było łatwe.
Najtrudniejszą częścią jest to, że po wybraniu elementu na liście, jeśli ten element ma elementy podrzędne, powinno pojawić się pod nim nowe pole wyboru. Jego źródłem danych będą dzieci wybranego elementu w pierwszym polu wyboru. Oczywiście można go było kontynuować na dowolnym poziomie głębokości.
Jak powinienem rozwiązać ten problem przez nokaut?
I już ułożyła próbkę tego, co mam do tej pory na jsfiddle: http://jsfiddle.net/graphicsxp/qXZjM/
jeden pomysł, który przychodzi mi na myśl, jest użycie szablonu z tym samym polu wyboru wewnątrz tego szablonu i dołączyć do elementu tablicy, gdy wybrany element z dziećmi. Nie jest jeszcze jasne, jak mam to zrobić, ale czy myślisz, że jestem na dobrej drodze? – Sam