1

在下面的代码中,两个按钮都会触发正确的点击处理程序。但是,当单击第二个按钮时,该对象的所有属性都未定义!$parent 是在这里使用的正确参考吗?还有另一种方法可以做到这一点吗?

<a class="btn rc" href="#" data-bind="click: goClick">This items works.</a>
      <div class="criteria" data-bind="with: profileCriteria">
        <a class="btn rc" href="#" data-bind="click: $parent.goClick">This doesn't relaly work</a>
      </div>
4

2 回答 2

3

click处理程序的第一个参数是当前数据上下文。因此,在您的第一次使用click: goClick中,参数将是您所期望的主要对象。

但是,当您在data-bind="with: profileCriteria"当前数据上下文中时,该profileCriteria对象将被传递给您的点击处理程序。所以 KO 不会自动确定您需要在此处$parent作为参数。

解决方案是将$parent手动传递给您的函数(请参阅文档:访问事件对象或传递更多参数部分):

<a class="btn rc" href="#" 
   data-bind="click: function() { return $parent.goClick($parent); }">
于 2013-05-16T04:57:49.713 回答
1

更清洁的方法,在我看来更正确的是

<a class="btn rc" href="#" 
   data-bind="click: $parent.goClick.bind($parent)">

这将导致的上下文this将是父项,而函数的参数将是单击项目的数据上下文(profileCriteria)

于 2013-05-16T07:38:09.053 回答