什么是 Knockout 自定义绑定"after"变量?



我正在使用敲除 asp.net MVC 用于某些项目。
我正在使用以下敲除

bindingHandler
ko.bindingHandlers.select2 = {
    after: ["options", "value", "selectedOptions"],
    init: function (el, valueAccessor, allBindingsAccessor, viewModel) {
        // no explicit reference to the 'after' variable
    },
    update: function (el, valueAccessor, allBindingsAccessor, viewModel) {
        // no explicit reference to the 'after' variable
    }
}

我从这个问题中获得了此代码,我对此进行了很少的修改。
基本上是Select2插件的custom binding handler

问题
我只想知道after: ["options", "value", "selectedOptions"],在这里的含义。initupdate功能中的任何地方都没有引用此变量。
在这种情况下,此变量有任何意义吗?还是这是敲除的指令,以使其在执行[optionsvalueselectedOptions]绑定后执行此自定义绑定?

注意自定义绑定的文档对此变量一无所知。

你是正确的,因为它似乎没有记载。挖掘KO源代码向我们显示了:

// First add dependencies (if any) of the current binding
if (binding['after']) {
    cyclicDependencyStack.push(bindingKey);
    ko.utils.arrayForEach(binding['after'], function(bindingDependencyKey) {
        if (bindings[bindingDependencyKey]) {
            if (ko.utils.arrayIndexOf(cyclicDependencyStack, bindingDependencyKey) !== -1) {
                throw Error("Cannot combine the following bindings, because they have a cyclic dependency: " + cyclicDependencyStack.join(", "));
            } else {
                pushBinding(bindingDependencyKey);
            }
        }
    });
    cyclicDependencyStack.length--;
}

您的假设似乎是正确的。KO正在建立一个依赖绑定的列表,这些绑定必须在当前绑定运行之前运行。内置值和选定的绑定利用了此关键字。

这是关于敲除github实施的讨论

这是一个相关的stackoverflow答案

请参阅该答案中的JSFIDDLE,例如代码。

最新更新