0

如果我有一个自定义绑定来聚合其他类似如下:

ko.bindingHandlers.binding1 = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var ctx = ko.utils.unwrapObservable(valueAccessor());

        ko.applyBindingsToNode(element, { 'binding2': ctx });        
        ko.applyBindingsToNode(element, { 'binding3': ctx });        
    }
};

“allBindingsAccessor”仅返回其 init 函数的当前绑定。

我期待它在 binding2“init”函数上返回 binding1 和 binding2,在 binding3“init”函数上返回 binding1、2 和 3。

以下小提琴显示了我提到的行为。 http://jsfiddle.net/J3sjq/5/

问题是我的 binding3 取决于其他绑定的存在,例如 binding2。

实现该行为的最佳方法是什么?我正在考虑修改上下文以告知其他绑定的存在,但这听起来有点像 hack。

提前致谢。

编辑:

我已经更新了我的小提琴以显示更多原始问题,我试图简化但我可能做得过火了。

http://jsfiddle.net/J3sjq/6/

在新的小提琴中, binding1 被一个 initFieldStatus 替换,它初始化 3 个其他复杂绑定,每个绑定计算一个输入字段状态, isInputAtWarning 绑定依赖于元素上声明的其他绑定。

希望这能澄清这个问题。

谢谢你。

编辑2:

我提供了一个更真实的例子来说明我正在尝试实现的内容。

http://jsfiddle.net/J3sjq/8/

4

1 回答 1

0

ko.applyBindingsToNode您可以直接调用init绑定的函数,而不是调用。

ko.bindingHandlers.isInputAtWarning.init(
    element, function() { return observable.isInputAtWarning }, 
    allBindingsAccessor, viewModel, bindingContext);

http://jsfiddle.net/mbest/J3sjq/9/

但是如果你只是直接调用它,你不妨把它变成一个函数。

function isInputAtWarning(element, value, allBindingsAccessor) {
    ...
}

...    

isInputAtWarning(element, observable.isInputAtWarning, allBindingsAccessor);
于 2013-12-03T21:35:36.083 回答