【发布时间】:2012-03-15 15:26:53
【问题描述】:
我在这里创建了一个简单的演示来演示该问题:
http://jsfiddle.net/boblauer/eCugY/
基本上,我希望我的 userUpdated 函数在我更新用户属性时运行,但它只在页面加载时运行一次。
感谢任何帮助。
【问题讨论】:
标签: knockout.js knockout-mapping-plugin
我在这里创建了一个简单的演示来演示该问题:
http://jsfiddle.net/boblauer/eCugY/
基本上,我希望我的 userUpdated 函数在我更新用户属性时运行,但它只在页面加载时运行一次。
感谢任何帮助。
【问题讨论】:
标签: knockout.js knockout-mapping-plugin
您的问题是您希望 userUpdated 计算在用户更新时触发,因为您将用户设置为计算的上下文。
这些 KO 计算工作是如何进行的,它首先立即触发,并在触发过程中记录遇到的任何可观察对象。当这些 observables 之一被更新时,计算函数再次触发。在您的情况下,您的函数不会调用任何可观察对象。它只是调用警报。上下文对象不计入 observables 列表。
你可以通过在你的函数中使用用户 observable 来实现它。或者,您可能应该使用订阅,这是一个在可观察到的变化时调用的函数。将您的计算替换为
user.name.subscribe(function(newvalue) {
alert('user updated to ' + newvalue);
});
Computed 通常用于返回计算值。如果您开始将它们用作任意函数调用者,您最终可能会陷入无限循环(如果您决定更新计算中的可观察对象)。
希望这会有所帮助。
【讨论】: