我有一个视图模型,MyClass,带有数组属性MyList,MyList是一个具有Prop1和MySubList等属性的对象。
我有一个<div data-bind="with: MyClass">
,我在其中构建了一个表。我希望表的列可以排序,因此大多数<th>
看起来像这样:
<th data-bind="sort: { myArray: MyList, myProperty: 'Prop1' }">Prop One</th>
我有上面提到的sort
的ko.bindingHandler,它通过myArray运行,在myProperty上排序。一切正常。
当需要处理MySubList
属性的条目时,我想为MySubList
中的每个项创建一个可变数量的列。
现在,从MyClass
的另一个实例,MyList
中的项目数可能会有所不同,但在MyList
的各个项目中,{{1}中的项目数量是固定的,所以我可以从任何一个MySubList
项中可靠地确定我需要的列数。
所有这些项目都是可观察的。
因此,为了提供可变数量的列,我有这个结构:
MyList
列出来很棒。但问题出在这里:在<!-- ko foreach: { data: MyList()[0].MySubList, as: 'subList' -->
<th data-bind="sort: { myArray: MyList, myProperty: 'SomeSubListProperty' }"></th>
<@-- /ko -->
处理程序中,MyList未定义。 MySubList也是。由于上面的其他sort
没有定义MyList,我的猜测是ko foreach引入了一个新的范围。当然,MyList在实际的foreach语句范围内,因为<th>
的有效期为data
。所以,我正在寻找一种方法将对MyList的良好引用传递给subList
。
这还够继续吗?
答案 0 :(得分:1)
由于您在循环中已经更改了范围,因此您需要从循环访问父作用域,这可能有所帮助:
<!-- ko foreach: { data: MyList()[0].MySubList, as: 'subList' -->
<th data-bind="sort: { myArray: $parent.MyList, myProperty: 'SomeSubListProperty' }"> </th>
<@-- /ko -->