knockout:如何从自定义父绑定调用子绑定?

时间:2014-01-03 16:23:34

标签: javascript knockout.js

我在DOM中有元素的自定义绑定:

<div data-bind="customBinding">
     <div class="for-view" data-bind="text: Property"></div>
     <div class="for-edit" data-bind="childBinding"></div>
</div>

在customBinding调用childBinding时有没有办法?它会像这样说起来:

 if <$('.for-edit') element has binding of type childBinding>
     <process childBinding first>       //this part is a problem
 <continue customBinding>

我的方案与内联编辑有关。 customBinding负责设置内联编辑,添加基于子元素类的显示/隐藏绑定等。 我遇到的问题是现在我有一个自定义的childBinding来创建包装器。如果在customBinding之后发生了childBinding,那么我就有问题了。我需要在customBinding期间调用childBinding,然后停止dedent子绑定。

1 个答案:

答案 0 :(得分:1)

我想这是可能的,无论如何使用Knockout自定义绑定,您可以完全控制何时调用子绑定。我要customBinding首先将其称为子绑定,例如:

ko.bindingHandlers['customBinding'] = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        // apply bindings to child first
        ko.applyBindingsToDescendants(bindingContext, element);

        // ... Process Custom binding

        return { 'controlsDescendantBindings': true };
    }
};

然而,为什么你会为同一件事有两个不同的绑定,这只会让事情变得更难。为什么不将所有逻辑放在customBinding

ko.bindingHandlers['customBinding'] = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        $(element).find('.for-edit').each(function (i, x) {
            // apply child binding logic
        });

        // ... Process Custom binding
    }
};

希望这有帮助。