关于嵌套数组

时间:2015-06-04 19:19:17

标签: 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 -->

但是如果没有“无法解析绑定”而无法做到这一点&#39;错误。

我可以做类似

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

并返回&#39;对象对象&#39;,但是一旦我做了 <span data-bind="text: FacetResults[0[].Term" </span>, 我得到了相同的破坏绑定错误。

我已经考虑过将结果集分解为多个observableArrays以避免这种情况,但是这些用例不需要特殊的表示逻辑,我可以使用嵌套的ko: foreach循环,以及所以我想在可能的情况下坚持使用一个数组(特别是考虑到返回的数据类型总是相同的,并且在我们从调用返回时解析这些数据类型)。

为了它的价值,我还能够在运行时检查对象,并通过console.log断言FacetResults [0] .Term是一个有效字段(vm.FacetResults() [0] .Term);没有问题。

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

1 个答案:

答案 0 :(得分:2)

我相信你正在寻找with绑定。

  

with绑定创建一个新的绑定上下文,以便后代   元素绑定在指定对象的上下文中。

这应该对你有用

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