【问题标题】:Knockout nested objects and parentheses淘汰嵌套对象和括号
【发布时间】:2012-11-18 20:37:32
【问题描述】:

我没有得到一些东西。 根据 KO 文档(以及关于 SO 的许多帖子),在查询和编写 observable 时应该使用括号。但是在绑定子属性时,在我看来,是否使用括号并不重要。

<span data-bind="text: selectedMessage() && selectedMessage().message().subject()"></span>
<span data-bind="text: selectedMessage() && selectedMessage().message().subject"></span>

= 都返回正确的值。

谁能解释一下这是为什么?

小提琴:http://jsfiddle.net/viktorb/DKg74/

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    如果绑定值是一个 observable,KO 会为你“解包”它,所以你不必自己用括号解包(或调用 ko.utils.unwrapObservable)。

    在您的第二个示例中,绑定值为:selectedMessage() &amp;&amp; selectedMessage().message().subject。当这个表达式计算为 subject 属性时,KO 看到计算的值是一个 observable,所以它为你解包。 (在内部这可能只是对 ko.utils.unwrapObservable 的调用)。

    但是,由于表达式 评估为 message 属性,我假设它也是一个可观察的,因此访问该属性的括号是必要的(例如 selectedMessage().message.subject 不会不工作)。

    【讨论】:

    • 感谢您的意见。很有帮助。
    【解决方案2】:

    如文档所述:

    observables 的全部意义在于它们可以被观察到,也就是说,其他代码可以说它希望收到更改通知。这就是许多 KO 的内置绑定在内部所做的。因此,当您编写 data-bind="text: personName" 时,文本绑定会注册自己以在 personName 更改时收到通知(假设它是一个可观察的值,现在就是这样)。

    这是关于是否是observable

    有关详细信息,请参阅http://knockoutjs.com/documentation/observables.html 上的读写 observables

    我对您的小提琴进行了一些修改,您可以在其中看到带括号和不带括号的区别:http://jsfiddle.net/DKg74/1/

    【讨论】:

    • 感谢您的意见。很有帮助。
    猜你喜欢
    • 2015-01-04
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2014-01-30
    • 2012-09-07
    相关资源
    最近更新 更多