2012-02-14 7 views
29

Mam proste foreach:knockout właściwość ViewModel niezdefiniowany

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

staram się zrobić to w taki sposób, że może wiązać przeciwko modelu {PersonID: 33}, a reszta po prostu nie czyni, jeśli brakuje. gdy próbuję go ten i inne sposoby ja dostać

Uncaught Error: Unable to parse bindings. 
Message: ReferenceError: MailingAddress is not defined; 
Bindings value: if:MailingAddress 

Stworzyłem prostą jsfiddle do testu:

http://jsfiddle.net/E7kUr/

Odpowiedz

69

Tak, istnieje kilka opcji, które masz:

  1. KO będzie miał problem, gdy spróbujesz powiązać z niezdefiniowanymi właściwościami, chyba że są one poza obiektem. Możesz więc przedrostować swoje różne wiązania za pomocą $data., a KO będzie w stanie analizować twoje powiązania. Przykład: http://jsfiddle.net/rniemeyer/dLCL8/ Jeśli wiesz, że kilka właściwości będzie zawsze razem, możesz użyć instrukcji o tych opcjach w swoim oświadczeniu: with lub if.

  2. Innym sposobem na zajęcie się właściwościami "niezdefiniowanymi" jest utworzenie powiązania, które wypełnia te właściwości, gdy ich brakuje. Spójrz na odpowiedź this. Byłoby to podobne, ale potencjalnie wiążące "tekst". Próbka: http://jsfiddle.net/rniemeyer/dLCL8/4/

+0

próbowałem tekst z pliku init z {PersonID: 33, nazwisko: "Frank"} i to robi 't pokaż nazwisko ... – maxfridbe

+0

Zaktualizowałem wiązanie. Musi być nieco inny dla wiązania 'text': http://jsfiddle.net/rniemeyer/dLCL8/4/ –

+0

@RPNiemeyer Dziękujemy za sugestię, w jaki sposób możemy to zrobić z opcją" attr "? –