web-dev-qa-db-fra.com

propriété de modèle de vue désactivée non définie

J'ai un simple 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>

J'essaie de faire en sorte que je puisse me lier à un modèle {PersonId: 33} et le reste ne sera tout simplement pas rendu s'il manque. quand je l'essaie cela et d'autres façons que je reçois

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

J'ai créé un simple jsfiddle pour tester:

http://jsfiddle.net/E7kUr/

30
maxfridbe

Donc, vous avez quelques options:

  1. KO rencontrera un problème lorsque vous tenterez de vous lier à des propriétés non définies, à moins qu'elles ne soient hors d'un objet. Vous pouvez donc préfixer vos différentes liaisons avec $data. et KO pourra analyser vos liaisons. Exemple: http://jsfiddle.net/rniemeyer/dLCL8/ Si vous savez que plusieurs propriétés seront toujours ensemble, vous pouvez utiliser un with ou if déclaration autour de ces options.

  2. Une approche différente de la gestion des propriétés "non définies" consiste à créer une liaison qui remplit ces propriétés lorsqu'elles sont manquantes. Regardez ceci réponse. Ce serait similaire, mais potentiellement avec la liaison "texte". Exemple: http://jsfiddle.net/rniemeyer/dLCL8/4/

73
RP Niemeyer

Utilisez le $data préfixe, KO peut l'analyser

Exemple: http://jsfiddle.net/baryon/NsuL7/1/

7
Baryon Lee