几件事我不明白。
根据KO文档(以及有关SO的许多文章),在查询和编写可观察值时应使用括号。但是在绑定(bind)子属性时,在我看来,是否使用括号都没有关系。

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

=都返回正确的值。

谁能向我解释为什么?

fiddle :http://jsfiddle.net/viktorb/DKg74/

最佳答案

如果绑定(bind)值是可观察的,则KO为您“解包”它,因此您不必自己用括号将其解包(或调用ko.utils.unwrapObservable)。

在您的第二个示例中,绑定(bind)值是:selectedMessage() && selectedMessage().message().subject。当此表达式的值为subject属性时,KO会看到评估的值是可观察的,因此它将为您解包。 (在内部,这可能只是对ko.utils.unwrapObservable的调用)。

但是,由于该表达式不能求值message属性(我认为这也是一个可观察的属性),因此访问该属性的括号是必需的(例如selectedMessage().message.subject无法使用)。

09-26 10:24