2017-04-22 5 views
1

Ich verwende knockout mit ASP.NET MVC für ein Projekt.
Ich bin mit den folgenden bindingHandler KOWas ist Knockout Custom Binding "nach" Variable?

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

habe ich diesen Code aus this question und ich verändern es wenig.
Es ist im Grunde eine custom binding handler für die Select2 plugin.

Frage
Ich will nur wissen, was die after: ["options", "value", "selectedOptions"], hier bedeutet. In den Funktionen init oder update gibt es keinen Verweis auf diese Variable.
Hat diese Variable in diesem Zusammenhang eine Bedeutung? oder ist dies eine Anweisung zum Knockout, um diese benutzerdefinierte Bindung auszuführen, nachdem sie [options, value, selectedOptions] Bindungen abgeschlossen hat?

Hinweis die Dokumentation der custom binding erwähnt nichts über diese Variable.

Antwort

1

Sie haben Recht, dass es undokumentiert zu sein scheint. Diese Graben in die KO source code zeigt uns:

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

Ihre Annahme erscheint richtig. KO erstellt eine Liste abhängiger Bindungen, die ausgeführt werden müssen, bevor die aktuelle Bindung ausgeführt werden kann. Die integrierten Bindungen value und selectedOptions nutzen dieses Schlüsselwort.

Hier ist die discussion on implementation from the Knockout Github

Hier ein verwandtes ist StackOverflow answer

die JSFiddle Siehe in dieser Antwort zum Beispiel Code.

Verwandte Themen