knockout.js - 2d数组绑定问题

时间:2013-05-31 13:49:46

标签: javascript knockout.js knockout-2.0

我想使用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/

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/