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

What is Knockout custom binding "after" variable?

我正在为某些项目使用 knockoutASP.NET MVC
我正在使用以下 bindingHandler of knockout

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
    }
}

我从 and I modified it little.
It is basically a custom binding handler for the Select2 plugin 那里得到了这个代码。

问题
我只想知道 after: ["options", "value", "selectedOptions"], 在这里是什么意思。 initupdate 函数中的任何地方都没有引用此变量。
这个变量在这种情况下有什么意义吗?或者这是一条指令,使其在完成 [optionsvalueselectedOptions] 绑定后执行此自定义绑定?

备注 custom binding 的文档没有提到这个变量。

你是对的,它似乎没有记录。深入研究 KO source code 向我们展示了这一点:

// 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 正在构建依赖绑定列表,在当前绑定可以 运行 之前必须 运行。内置 value and selectedOptions 绑定利用了这个关键字。

这是discussion on implementation from the Knockout Github

这里是相关的Whosebug answer

请参阅该答案中的 JSFiddle 以获取示例代码。