javascript - KnockoutJS foreach 嵌套数组的单个元素

标签 javascript knockout.js foreach

我正在进行一个项目,试图为给定的查询呈现搜索过滤器方面,但规则是这样的,我不能简单地使用嵌套 ko: foreach语句,因为不同的结果集有不同的显示规则。

我正在映射的对象如下所示:

FacetResults: ko.observableArray([
{
   Term: 'myTerm',
   Values: [{'key1': 5}, {'key2': 13}]
},
{  Term: 'myTerm2',
   Values: [{'key3': 6}, {'key4': 42}]
}]);

基本上,我想要完成的事情是这样的

<!-- ko foreach: FacetResults()[0] -->
   <span data-bind="text: Term"></span>
   <ul data-bind="foreach: Values">
    <!-- do something -->
   </ul>
<!-- /ko -->

但是我无法在不出现“无法解析绑定(bind)”错误的情况下执行此操作。

我能够做类似的事情

<span data-bind="text: FacetResults[0]"></span>

并返回“Object object”,但是一旦我这样做了 <span data-bind="text: FacetResults[0[].Term" </span> , 我遇到了同样的绑定(bind)损坏错误。

我曾考虑过将结果集分解为多个 observableArray 以避免这种情况,但这是一个不需要特殊表示逻辑的用例,我可以在其中使用嵌套 ko: foreach循环,因此如果可能的话,我想坚持使用一个数组(特别是考虑到返回的数据类型始终相同,这样当它们从调用返回时我就不用解析它们了)。

就其值(value)而言,我还可以在运行时检查对象,并通过 console.log(vm.FacetResults()[0].Term) 断言 FacetResults[0].Term 是有效字段;没有问题。

任何帮助将不胜感激。谢谢!

最佳答案

我相信您正在寻找 with绑定(bind)。

The with binding creates a new binding context, so that descendant elements are bound in the context of a specified object.

这应该适合你

<!-- ko with: FacetResults()[0] -->
   <span data-bind="text: Term"></span>
   <ul data-bind="foreach: Values">
    <!-- do something -->
   </ul>
<!-- /ko -->

关于javascript - KnockoutJS foreach 嵌套数组的单个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30652310/

相关文章:

javascript - 了解node.js中的请求获取

javascript - 如何使用 KnockoutJS、SammyJS 和 pagerJS 组织 SPA

javascript - 谷歌浏览器中奇怪的下拉行为

javascript - 使用 routes 属性的 Backbone 中的默认路由

javascript - 从 DIV 元素内的数据更新 amChart 图表上的数据

javascript - 如何使用 axios 库在 post 请求中发送对象数组

java - 嵌套 For-each 循环打印 Arraylist 中的每个项目

javascript - "create"指定主 "create"时不使用嵌套对象的 KO 映射选项

javascript - 根据不同型号选择 Angular

javascript - 在 JavaScript 中使 forEach 异步