0

我在页面上有非常复杂的标记。所以在它的某些区域我需要主模型,以在单击某个元素时显示其子对象。子对象也是复杂对象,因此为了向它展示一个属性,我使用自定义控件和单独的 applyBinding 调用。child 的一些属性是简单的属性,所以我直接显示它们。这是这部分的简化标记:

ko.bindingHandlers.stopBinding = {
    init: function() {
     return { controlsDescendantBindings: true };
   }
};

<div id="shell" data-bind="with:details, visible:isVisible">
   <h2 data-bind="text: $root.header"></h2>
   <div data-bind="stopBinding: true" style="block;clear:both">
      <div id="profile">
        first name:<input data-bind="value: first" />
        last name:<input data-bind="value: last" />
     </div>
   </div>
</div>

当 isVisible 最初为真时 - 一切都按预期工作。当它稍后在某处设置为 true 时 - 内部绑定不起作用。任何想法为什么会发生这种情况?这是小提琴:http: //jsfiddle.net/yauhen/NNMLh/

4

1 回答 1

4

您看到的问题与单个元素的所有绑定一起触发的事实有关。这意味着当您更改时isVisible,您将同时触发visible绑定和with绑定。当with绑定被触发时,它将用它的“模板”(原始子元素)替换它的子元素并重新绑定。

在您的情况下,解决方法是将这些绑定放在单独的元素上。也许在里面添加一个额外的“包装器”div,它具有如下visible绑定:

<div data-bind="with: details">
   <div data-bind="visible: $parent.isVisible">
      ...
   </div>
</div>
于 2013-06-12T18:30:17.523 回答