我想使用knockout.js
创建一个二维数组绑定我希望它根据这个2d数组的内容生成数据,但它不起作用。
首先,这是我的淘汰模型
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");
现在,我在我的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>
这是我希望的预期结果:
<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>
问题在于它通过字母循环显示它们。以下是用于演示的jsFiddle示例:http://jsfiddle.net/MMrpM/1/
答案 0 :(得分:4)
你的问题部分是因为你没有错误地设置你的淘汰赛。在淘汰赛中你需要调用你的observable来获取或设置这样的值:
// Get
var val = self.searchResults();
// Set
self.searchResults(val);
同样,JavaScript不允许您像现在一样创建和操作数组。您需要实际创建一个对象数组。因此,您的代码实际上应该类似于:
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"];
看到它在这个jsfiddle工作:http://jsfiddle.net/dkqdw/