【问题标题】:KnockoutJS - How do I create an observable property that observes a mapped object?KnockoutJS - 如何创建观察映射对象的可观察属性?
【发布时间】:2012-03-15 15:26:53
【问题描述】:

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

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

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

感谢任何帮助。

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

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

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

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

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

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

    希望这会有所帮助。

    【讨论】:

    • 太棒了,我确实觉得使用计算来执行逻辑很脏,但我不知道还有其他方法。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 2017-06-16
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多