2013-08-28 4 views
5

Sembra che io possa scrivere una funzione sul mio modello di vista in due modi con lo stesso risultato.Differenza totale tra la normale funzione javascript e una calcolata

normale funzione javascript:

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

ko calcolato:

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

'vm' è il modello di vista e selectedFormat è un osservabile sul modello di vista. In entrambi i casi, quando si seleziona Formattazione modificata, la funzione viene attivata. Quindi la mia domanda è qual è la differenza tra i due metodi?

+0

Nel tuo html come stai usando la funzione 'Testi '? – nemesv

risposta

4

che sto supponendo un data-binding in queste righe:

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

Linea di fondo:
In entrambi i casi il text associazione creerà una dipendenza da selectedFormat sul rendering iniziale.


Dettagli:
Entrambe vostre situazioni aggiornerà il span perché:

  1. caso Funzione. L'associazione text noterà sul rendering iniziale che esiste una dipendenza dall'osservatore selectedFormat perché viene chiamata nella propria funzione. Se l'osservabile dovesse mai cambiare, troverà quella dipendenza nei registri di KO e attiverà un aggiornamento sull'associazione text. La dipendenza si presenta così:

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

    Vedi this fiddle.

  2. Caso calcolato. Il secondo caso può funzionare allo stesso modo, anche se è leggermente più ovvio, perché Texts ora dipende da un osservatore (calcolato) che funge da intermediario per l'osservabile selectedFormat. La dipendenza è ora:

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

    Vedi this fiddle.