javascript - knockout.js - 二维数组绑定(bind)问题

标签 javascript knockout.js knockout-2.0

我想使用 knockout.js 创建一个二维数组绑定(bind)

我想让它根据这个二维数组的内容生成数据,但它不起作用。

首先,这是我的 knockout 模型

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/

最佳答案

您的问题部分是因为您错误地设置了 knockout observable。在 knockout 中,您需要调用您的可观察对象来获取或设置值:

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

关于javascript - knockout.js - 二维数组绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16858877/

相关文章:

javascript - 如何在 webview 内的 web 之间进行通信以响应 native 应用程序

css - 在 Knockout sortable 的 Move 事件之后更改元素的 CSS

twitter-bootstrap - 敲除验证成功类?

javascript - knockoutjs 用逗号格式化数字

javascript - 限制/限制谷歌地图标记位置

javascript - 点击()开始加载

javascript - 阅读 Javascript 代码时遇到问题

javascript - 在 Javascript 中,有没有一种方法可以评估可能是也可能不是函数的变量

asp.net-mvc - knockout 模板中的js字符串格式索引

javascript - 仅当 observable 尚未在 knockout.js 中设置为某个值时才更改它