敲出$parent点击click事件很好,但是结果对象的属性没有定义

Knock out $parent hits click event fine, but resulting object's properties are undefined

本文关键字:对象 结果 属性 定义 点击 parent click 事件 很好 敲出      更新时间:2023-09-26

在下面的代码中,两个按钮都触发了正确的单击处理程序。但是,当单击第二个按钮时,该对象的所有属性都未定义!$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>

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

但是当你在data-bind="with: profileCriteria"内部时,当前的数据上下文是profileCriteria对象,所以它被传递给你的点击处理程序。因此,KO不会自动计算出您在这里需要将$parent作为参数。

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

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

我认为更清晰更正确的方法是

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

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