2013-08-28 9 views
5

Es scheint, ich kann eine Funktion auf meinem Ansichtsmodell auf zwei Arten mit dem gleichen Ergebnis schreiben.Knockout Unterschied zwischen normalen Javascript-Funktion und eine berechnete

Normale JavaScript-Funktion:

vm.Texts = function() { 
    var self = vm; 
    if (self.selectedFormat()) { 
    return self.selectedFormat().Texts(); 
    } 
}; 

ko berechnet:

vm.Texts = ko.computed(function() { 
    var self = vm; 
    if (self.selectedFormat()) { 
    return self.selectedFormat().Texts(); 
    } 
}); 

'vm' ist die Ansicht Modell und selectedFormat ist eine beobachtbare für die Sicht-Modell. In beiden Fällen, wenn selectedFormat sich ändert, wird die Funktion ausgelöst. Also meine Frage ist, was ist der Unterschied zwischen den beiden Methoden?

+0

In Ihrem HTML, wie verwenden Sie Ihre 'Texte' Funktion? – nemesv

Antwort

4

Ich bin die Annahme, eine Datenbindung in diese Richtung:

<span data-bind="text: Texts()"></span> 

Unterm Strich:
In beiden Fällen die text Bindung wird eine Abhängigkeit von selectedFormat beim erstmaligen Rendering erstellen.


Details:

  1. Funktion Fall:
    Ihre beiden Situationen wird die span weil aktualisieren. Die text Bindung wird beim ersten Rendern bemerken, dass eine Abhängigkeit von selectedFormat beobachtbar ist, weil sie in Ihrer Funktion aufgerufen wird. Wenn sich das Observable jemals ändert, wird es die Abhängigkeit in den KO-Registern finden und eine Aktualisierung der text-Bindung auslösen. Die Abhängigkeit sieht wie folgt aus:

    text binding --> depends-indirectly-on --> selectedFormat

    this fiddle See.

  2. Rechnergehäuse. Der zweite Fall könnte genauso funktionieren, obwohl er etwas offensichtlicher ist, da Texts nun von einer (berechneten) Observablen abhängig ist, die als Vermittler zur selectedFormat Observablen fungiert. Die Abhängigkeit ist jetzt:

    text binding --> depends-on --> Texts computed --> depends-on --> selectedFormat

    this fiddle See.

Verwandte Themen