Нокаут вложенных объектов и скобок

Мало что я не делают получить. Согласно документации KO (и многим постам здесь, в SO), скобки должны использоваться при запросах и написании наблюдаемых. Но при связывании подсвойств мне кажется, что это неНеважно, если вы используете скобки или нет.

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

= оба возвращают правильное значение.

Может кто-нибудь объяснить мне, почему это?

Скрипки:http://jsfiddle.net/viktorb/DKg74/

Ответы на вопрос(2)

Решение Вопроса

Если значение привязки является наблюдаемым, КО "разворачивает» это для вас, так что вы неВы должны развернуть его самостоятельно с помощью скобок (или вызова ko.utils.unwrapObservable).

Во втором примере значение привязки:selectedMessage() && selectedMessage().message().subject, Когда это выражение оценивается вsubject KO видит, что оцененное значение является наблюдаемым, и поэтому разворачивает его для вас. (Внутренне это, вероятно, просто вызов ko.utils.unwrapObservable).

Но, так как выражениене оценить доmessage собственность, которую яЕсли предположить, что это также наблюдаемое, скобки для доступа к этому свойству необходимы (например,selectedMessage().message.subject Wouldn»т работа).

 judehall20 нояб. 2012 г., 19:27
Спасибо за ваш вклад. Очень полезно.

Как сказано в документации:

Весь смысл наблюдаемых заключается в том, что они могут наблюдаться, то есть другой код может сказать, что он хочет получать уведомления об изменениях. Тот'что многие из нокаутовs встроенные привязки делать изнутри. Итак, когда вы написали data-bind = "text: personName "текстовая привязка регистрировалась для уведомления об изменении personName (при условии, чтоэто наблюдаемая ценность, которой она является сейчас).

Это'о том, чтобы бытьobservable или нет.

УвидетьЧтение и запись наблюдаемых вhttp://knockoutjs.com/documentation/observables.html для получения дополнительной информации.

Мы немного изменили вашу скрипку, чтобы вы могли увидеть разницу с круглыми скобками и без них:http://jsfiddle.net/DKg74/1/

 judehall20 нояб. 2012 г., 19:29
Спасибо за ваш вклад. Очень полезно.

Ваш ответ на вопрос