如果我有一个自定义绑定聚合其他人,如下所示:
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。
实施该行为的最佳方式是什么?我正在考虑修改上下文以通知其他绑定存在,但它听起来有点像黑客。
提前致谢。
编辑:
我已经更新了我的小提琴,以显示更多原始问题,我试图简化,但我可能已经过度了。
在新的小提琴中,binding1被初始化3个其他复杂绑定的initFieldStatus替换,每个绑定计算输入字段状态,isInputAtWarning绑定依赖于在元素上声明的其他绑定。
希望这会澄清这个问题。
三江源。
编辑2:
我提供了一个关于我想要实现的更真实世界的例子。
答案 0 :(得分: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);