2012-03-15 2 views
1

Я создал простую демонстрацию здесь, демонстрирующую проблему:KnockoutJS - Как создать видимое свойство, которое наблюдает за отображаемым объектом?

http://jsfiddle.net/boblauer/eCugY/

В принципе, я хочу, чтобы моя userUpdated функции для запуска, когда я обновить свойство пользователя, но она работает только один раз при загрузке страницы.

Любая помощь приветствуется.

ответ

1

Ваша проблема в том, что вы ожидаете, что userUpdated вызывается, когда пользователь обновляется, потому что вы устанавливаете пользователя как контекст вычисляемого.

Как эти расчетные работы KO, они срабатывают немедленно и в процессе стрельбы регистрируются все наблюдаемые, которые встречаются. Когда один из этих наблюдаемых обновляется, вычисляемая функция снова срабатывает. В вашем случае ваша функция не вызывает никаких наблюдаемых. Он просто вызывает предупреждение. Объект контекста не учитывается среди списка наблюдаемых.

Вы можете заставить это работать, просто используя пользователь, наблюдаемый в вашей функции. Альтернативно, вы, вероятно, должны использовать подписку, которая является функцией, вызываемой при появлении наблюдаемых изменений. Заменить вычисленные значения:

user.name.subscribe(function(newvalue) { 
    alert('user updated to ' + newvalue); 
}); 

Вычисляемые обычно используются для возврата вычисленных значений. Если вы начнете использовать их как произвольные вызывающие функции, вы можете попасть в бесконечные циклы (если вы решите обновить наблюдаемый в вычисленном).

Надеюсь, это поможет.

+0

Удивительно, я чувствовал себя грязным, используя вычисляемые для выполнения логики, но я не знал, что существует альтернативный подход. Большое спасибо! –

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