2012-02-14 2 views
29

У меня есть простой Еогеасп:Нокаут ViewModel свойство не определено

<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/

ответ

69

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

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

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

+0

я попытался текст инициализации с {PersonId: 33, LastName: "откровенную"} и это Безразлично 't показать фамилию ... – maxfridbe

+0

Я обновил привязку. Необходимо немного поменять для привязки текста: http://jsfiddle.net/rniemeyer/dLCL8/4/ –

+0

@RPNiemeyer Спасибо за предложение, как мы можем это сделать с привязкой «attr»? –

Смежные вопросы