【问题标题】:KnockoutJS foreach on individual element of nested arrayKnockoutJS foreach 嵌套数组的单个元素
【发布时间】:2015-06-04 19:19:17
【问题描述】:

我在一个项目中尝试为给定查询呈现搜索过滤器方面,但规则是我不能简单地使用嵌套的ko: foreachstatements,因为不同的结果集有不同的显示规则。

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

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

但是如果没有得到“无法解析绑定”错误,我就无法做到这一点。

我可以做类似的事情

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

并返回“对象对象”,但一旦我这样做 &lt;span data-bind="text: FacetResults[0[].Term" &lt;/span&gt;, 我得到了同样的绑定错误。

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

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

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

【问题讨论】:

    标签: javascript knockout.js foreach


    【解决方案1】:

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

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

    这应该适合你

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

    【讨论】:

    • 是的,就是这样。即时贴脸,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多