我正在尝试为给定查询呈现搜索过滤器构面的项目,但规则是这样的,我不能简单地使用嵌套的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);没有问题。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
我相信你正在寻找with绑定。
with绑定创建一个新的绑定上下文,以便后代 元素绑定在指定对象的上下文中。
这应该对你有用
<!-- ko with: FacetResults()[0] -->
<span data-bind="text: Term"></span>
<ul data-bind="foreach: Values">
<!-- do something -->
</ul>
<!-- /ko -->