knockout viewmodel属性undefined

max*_*dbe 31 knockout.js

我有一个简单的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>
Run Code Online (Sandbox Code Playgroud)

我试图让它可以绑定模型{PersonId:33},其余的只是不会渲染,如果失踪.当我尝试这个和我得到的其他方式

Uncaught Error: Unable to parse bindings.
Message: ReferenceError: MailingAddress is not defined;
Bindings value: if:MailingAddress
Run Code Online (Sandbox Code Playgroud)

我创建了一个简单的jsfiddle来测试:

http://jsfiddle.net/E7kUr/

RP *_*yer 74

所以,你有几个选择:

  1. 当您尝试绑定未定义的属性时,KO将遇到问题,除非它们不在对象之外.因此,您可以为各种绑定添加前缀$data.,KO将能够解析您的绑定.示例:http://jsfiddle.net/rniemeyer/dLCL8/ 如果您知道多个属性将始终在一起,那么您可以使用围绕这些选项的withif语句.

  2. 处理"未定义"属性的另一种方法是创建一个绑定,在缺少这些属性时填充这些属性.看看这个答案.它可能类似,但可能与'text'绑定.示例:http://jsfiddle.net/rniemeyer/dLCL8/4/


Bar*_*Lee 7

使用$data前缀,KO可以解析它

示例:http: //jsfiddle.net/baryon/NsuL7/1/