Свойство нокаута viewmodel undefined
У меня есть простой foreach:
<div id="customersArea" data-bind="foreach: people">
<div class="section" data-bind="attr: { 'personid': PersonId }" >
<div class="sectionActions">
<div><a class="action" href="#" data-bind='click: $parent.removePerson'>Remove</a></div>
</div>
<div class="sectionText">
<span data-bind="if:LastName, text:LastName"></span>
<span data-bind="if:FirstName, text:FirstName"></span>
<span data-bind="if:MailingAddress">
<span data-bind="with:MailingAddress">
<span data-bind="text:StreetPartOne"> </span>
<span data-bind="text:StreetPartTwo"> </span>
<span data-bind="text:City"></span>
<span data-bind="text:PostalCode"></span>
</span>
</span>
<span data-bind="if:EmailAddress, text:EmailAddress"></span>
<span data-bind="if:MainPhoneNumber, text:MainPhoneNumber"></span>
<span data-bind="if:MobilePhoneNumber, text:MobilePhoneNumber"></span>
</div>
<div class="sectionOptions">
</div>
</div>
</div>
Я пытаюсь сделать так, чтобы я мог привязываться к модели {PersonId: 33}, а остальное просто не будет отображаться, если отсутствует. когда я попробую это и другие способы получить
Uncaught Error: Unable to parse bindings.
Message: ReferenceError: MailingAddress is not defined;
Bindings value: if:MailingAddress
Я создал простой jsfiddle для тестирования:
http://jsfiddle.net/E7kUr/
Ответы
Ответ 1
Итак, есть несколько вариантов, которые у вас есть:
-
У KO будет проблема при попытке привязки к свойствам undefined, если они не находятся вне объекта. Таким образом, вы можете прикрепить ваши различные привязки $data.
, а KO сможет анализировать ваши привязки. Пример: http://jsfiddle.net/rniemeyer/dLCL8/ Если вы знаете, что несколько свойств всегда будут вместе, вы можете использовать оператор with
или if
вокруг тех опции.
-
Другой подход к обработке свойств "undefined" заключается в создании привязки, которая заполняет эти свойства, когда они отсутствуют. Посмотрите на этот ответ. Это было бы похоже, но потенциально с привязкой "текст". Пример: http://jsfiddle.net/rniemeyer/dLCL8/4/
Ответ 2
Используйте префикс $data
, KO может его проанализировать
Пример:
http://jsfiddle.net/baryon/NsuL7/1/