Ваша проблема в том, что вы ожидаете, что userUpdated
вызывается, когда пользователь обновляется, потому что вы устанавливаете пользователя как контекст вычисляемого.
Как эти расчетные работы KO, они срабатывают немедленно и в процессе стрельбы регистрируются все наблюдаемые, которые встречаются. Когда один из этих наблюдаемых обновляется, вычисляемая функция снова срабатывает. В вашем случае ваша функция не вызывает никаких наблюдаемых. Он просто вызывает предупреждение. Объект контекста не учитывается среди списка наблюдаемых.
Вы можете заставить это работать, просто используя пользователь, наблюдаемый в вашей функции. Альтернативно, вы, вероятно, должны использовать подписку, которая является функцией, вызываемой при появлении наблюдаемых изменений. Заменить вычисленные значения:
user.name.subscribe(function(newvalue) {
alert('user updated to ' + newvalue);
});
Вычисляемые обычно используются для возврата вычисленных значений. Если вы начнете использовать их как произвольные вызывающие функции, вы можете попасть в бесконечные циклы (если вы решите обновить наблюдаемый в вычисленном).
Надеюсь, это поможет.
Удивительно, я чувствовал себя грязным, используя вычисляемые для выполнения логики, но я не знал, что существует альтернативный подход. Большое спасибо! –