Chcem vytvoriť väzbu 2d poľa pomocou knockout.js
Chcem, aby generoval dáta založené na obsahu tohto 2d poľa, ale to nefunguje.
Po prvé, tu je môj knockout 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 mám toto v mojom html kóde:
<ul data-bind="foreach: searchResults">
<li data-bind="text:$data"></li>
<ul data-bind="foreach: $data">
<li data-bind="text: $data"></li>
</ul>
</ul>
Tu očakávam očakávaný výsledok:
<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>
Problém je v tom, že prechádza písmenami, ktoré im ukazujú. Tu je príklad jsFiddle na demonštrovanie: http://jsfiddle.net/MMrpM/1/
odpovede:
4 pre odpoveď č. 1Váš problém je čiastočne v tom, že ste "nastavili svoj knockout viditeľný nesprávne. V knockout musíte vzývať vašu pozorovateľnú hodnotu na získanie alebo nastavenie hodnoty:
// Get
var val = self.searchResults();
// Set
self.searchResults(val);
Rovnako tak JavaScript neumožňuje vytvárať a manipulovať s poliami tak, ako máte. Musíte skutočne vytvoriť pole objektov. Váš kód by mal byť v skutočnosti podobný:
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"];
Pozrite si, ako funguje v tomto jsfiddle: http://jsfiddle.net/dkqdw/