几件事我不明白。
根据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
无法使用)。