Подтвердить что ты не робот

Свойство нокаута 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/

4b9b3361

Ответ 1

Итак, есть несколько вариантов, которые у вас есть:

  • У KO будет проблема при попытке привязки к свойствам undefined, если они не находятся вне объекта. Таким образом, вы можете прикрепить ваши различные привязки $data., а KO сможет анализировать ваши привязки. Пример: http://jsfiddle.net/rniemeyer/dLCL8/ Если вы знаете, что несколько свойств всегда будут вместе, вы можете использовать оператор with или if вокруг тех опции.

  • Другой подход к обработке свойств "undefined" заключается в создании привязки, которая заполняет эти свойства, когда они отсутствуют. Посмотрите на этот ответ. Это было бы похоже, но потенциально с привязкой "текст". Пример: http://jsfiddle.net/rniemeyer/dLCL8/4/