Knockout.js 敲除viewmodel属性未定义

Knockout.js 敲除viewmodel属性未定义,knockout.js,Knockout.js,我有一个简单的方法: <div id="customersArea" data-bind="foreach: people"> <div class="section" data-bind="attr: { 'personid': PersonId }" > <div class="sectionActions"> <div><a class="a

我有一个简单的方法:

<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>
我创建了一个简单的JSFIDLE来测试:


因此,您有几个选择:

  • 当您尝试绑定未定义的属性时,KO将出现问题,除非它们脱离对象。因此,您可以使用
    $data作为各种绑定的前缀。
    和KO将能够解析您的绑定。示例:如果您知道多个属性总是在一起,那么您可以在这些选项周围使用
    with
    If
    语句

  • 处理“未定义”属性的另一个方法是创建一个绑定,在这些属性丢失时填充它们。看答案。这将是类似的,但可能与“文本”绑定。样本:


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

    样本:

    我用init尝试了带有{PersonId:33,LastName:“frank”}的文本,但它没有显示姓氏……我更新了绑定。对于
    文本
    绑定需要稍微不同:@RPNiemeyer感谢您的建议,我们如何使用“attr”绑定?
    Uncaught Error: Unable to parse bindings.
    Message: ReferenceError: MailingAddress is not defined;
    Bindings value: if:MailingAddress