bindingHandlers中的Knockout Scope问题

时间:2016-03-10 19:30:53

标签: javascript knockout.js scope

我有一个视图模型,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

这还够继续吗?

1 个答案:

答案 0 :(得分:1)

由于您在循环中已经更改了范围,因此您需要从循环访问父作用域,这可能有所帮助:

<!-- ko foreach: { data: MyList()[0].MySubList, as: 'subList' -->
<th data-bind="sort: { myArray: $parent.MyList, myProperty: 'SomeSubListProperty' }">  </th>
<@-- /ko -->