1

我在这里创建了一个简单的演示来演示这个问题:

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

基本上,我希望我的 userUpdated 函数在我更新用户属性时运行,但它只在页面加载时运行一次。

任何帮助表示赞赏。

4

1 回答 1

1

您的问题是您希望在userUpdated更新用户时触发计算,因为您将用户设置为计算的上下文。

这些 KO 计算工作是如何进行的,它首先立即触发,并在触发过程中记录遇到的任何可观察对象。当这些 observables 之一被更新时,计算函数再次触发。在您的情况下,您的函数不会调用任何可观察对象。它只是调用警报。上下文对象不计入 observables 列表。

你可以通过在你的函数中使用用户 observable 来实现它。或者,您可能应该使用订阅,这是一个在可观察到的变化时调用的函数。将您的计算替换为

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

Computed 通常用于返回计算值。如果您开始将它们用作任意函数调用者,您最终可能会陷入无限循环(如果您决定更新计算中的 observable)。

希望这可以帮助。

于 2012-03-15T16:03:36.843 回答