/ / knockout.js - problemy z łączeniem tablic 2d - javascript, knockout.js, knockout-2.0

knockout.js - problemy z łączeniem tablic 2d - javascript, knockout.js, knockout-2.0

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 № 1

Twó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/