2012-03-26 3 views
0

Ich habe gesehen, dass Modelle als Funktionen deklariert sind. Ich schätze, das liegt daran, dass es einfacher ist, auf andere Funktionen und Variablen innerhalb des Closings zurückzukommen? Wenn es sich um ein einfaches Schlüssel/Wert-Objekt handelt, können Sie mit 'this' nicht auf andere Variablen/Funktionen verweisen.Was sind die Unterschiede zwischen der Deklaration eines KnockoutJS-Modells mit selbstaufrufender Funktion?

Es gibt jedoch zwei Möglichkeiten, das Modell mithilfe einer Funktion zu deklarieren.

var vm1 = function() { 
    this.mydata = ko.observable(null) 
} 

ko.applyBindings(new vm1()); 

Und dann auch eine selbst Aufruf Funktion:

var vm2 = function() { 
    this.mydata = ko.observable(null) 
}(); 

ko.applyBindings(vm2); 

Was ist der Unterschied zwischen den zwei Ansätzen? Was ich finde, ist, dass die Verwendung des zweiten Ansatzes Probleme verursacht, weil ich nicht sicher bin, ob KO die Eigenschaften in vm2 "sehen" kann, da sie privat sind. Aber wie sind die Eigenschaften in vm1 sichtbar?

Ich frage mich auch, ob das "Enthüllungsmodul" -Muster mit KO-View-Modellen kompatibel ist und ob ich das stattdessen verwenden soll?

+0

Oh, Moment mal, macht das. * Effektiv öffentliche Eigenschaften? – jaffa

Antwort

0

In Ihrem ersten Beispiel, das Sie eine neue Instanz von VM1 Objekt deklarieren und die diese

Im zweiten Beispiel auf die VM1 Instanz verweisen die diese auf das Fenster Objekt beziehen und nicht auf die Instanz von VM2

Dann ja, um auf Ihren eigenen Kommentar zu antworten, das zweite Beispiel erstellt nur eine Eigenschaft namens mydata im Fensterobjekt.