2013-08-28 2 views
5

Кажется, я могу написать функцию на моей модели представления двумя способами с тем же результатом.Разница в нокауте между нормальной функцией javascript и вычисленным

Нормальный Javascript функция:

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

ко вычислен:

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

'ут' является модель представления и selectedFormat является наблюдаемой на модели представления. В обоих случаях, когда selectedFormat изменяется, функция запускается. Итак, мой вопрос в чем разница между этими двумя методами?

+0

В вашем html как вы используете функцию 'Texts'? – nemesv

ответ

4

Я допускающий связывания данных по этим линиям:

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

Нижняя линия:
В обоих случаях text связывание создает зависимость от selectedFormat на начальной визуализации.


Детали:
Оба вашей ситуации будет обновлять span, потому что:

  1. Функция случай. Связывание text заметит при первоначальном рендеринге, что есть зависимость от наблюдаемого selectedFormat, потому что он вызывается в вашей функции. Если наблюдаемый когда-либо будет изменен, он найдет эту зависимость в регистрах KO и инициирует обновление привязки text. Зависимость выглядит следующим образом:

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

    См this fiddle.

  2. Расчетный случай. Второй случай может работать одинаково, хотя он несколько более очевиден, поскольку Texts теперь зависит от (вычисленного) наблюдаемого, который действует как посредник с наблюдаемым selectedFormat. Зависимость теперь:

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

    См this fiddle.

Смежные вопросы