Chcę utworzyć wiązanie tablicy 2d przy użyciu pliku knockout.js
Chcę, aby generował dane w oparciu o zawartość tej tablicy 2d, ale to nie działa.
Po pierwsze, oto mój nokautowy model
self.searchResults = ko.observableArray()
//Let"s populate some data so you know the structure of my array
self.searchResults = new Array("Network", "Devices")
self.searchResults["Network"] = new Array("1", "2");
self.searchResults["Devices"] = new Array("a", "b", "c");
Teraz mam to w moim kodzie HTML:
<ul data-bind="foreach: searchResults">
<li data-bind="text:$data"></li>
<ul data-bind="foreach: $data">
<li data-bind="text: $data"></li>
</ul>
</ul>
Oto oczekiwany rezultat, na który mam nadzieję:
<ul>
<li>Network</li>
<ul>
<li>1</li>
<li>2</li>
</ul>
<li>Devices</li>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</ul>
Problem polega na tym, że pętle przechodzą przez litery, aby je pokazać. Oto przykład jsFiddle do wykazania: http://jsfiddle.net/MMrpM/1/
Odpowiedzi:
4 dla odpowiedzi № 1Twój problem polega częściowo na tym, że ustawiasz nokaut obserwowany niepoprawnie odwołać się Twoje obserwowalne, aby uzyskać lub ustawić wartość jako taką:
// Get
var val = self.searchResults();
// Set
self.searchResults(val);
Jak dobrze, JavaScript nie pozwala na tworzenie i manipulowanie tablicami, jak masz. Musisz faktycznie utworzyć tablicę obiektów. Dlatego Twój kod powinien być podobny do:
self.searchResults = ko.observableArray();
//Let"s populate some data so you know the structure of my array
self.searchResults = [ { name: "Network", children: [] }, { name: "Devices", children: [] } ]
self.searchResults[0].children = ["1", "2"];
self.searchResults[1].children = ["a", "b", "c"];
Zobacz, jak działa w tym jsfiddle: http://jsfiddle.net/dkqdw/