【问题标题】:knockout viewmodel property undefined淘汰视图模型属性未定义
【发布时间】:2012-03-06 01:48:27
【问题描述】:

我有一个简单的 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>

我正在尝试使它可以绑定到模型 {PersonId:33} 并且如果丢失,其余部分将不会呈现。当我尝试这个和其他方式时,我得到了

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

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

http://jsfiddle.net/E7kUr/

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    所以,您有几个选择:

    1. 当您尝试绑定未定义的属性时,KO 会出现问题,除非它们不属于对象。所以,你可以在你的各种绑定前面加上$data.,KO 就可以解析你的绑定。示例:http://jsfiddle.net/rniemeyer/dLCL8/ 如果您知道多个属性将始终在一起,那么您可以围绕这些选项使用withif 语句。

    2. 处理“未定义”属性的另一种方法是创建一个绑定,在这些属性缺失时填充这些属性。看this的回答。这将是相似的,但可能与“文本”绑定有关。示例:http://jsfiddle.net/rniemeyer/dLCL8/4/

    【讨论】:

    • 我尝试了带有 { PersonId: 33, LastName:"frank" } 的 init 文本,但它没有显示姓氏...
    • 我更新了绑定。 text 绑定需要稍有不同:jsfiddle.net/rniemeyer/dLCL8/4
    • @RPNiemeyer 感谢您的建议,我们如何使用“attr”绑定来做到这一点?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      相关资源
      最近更新 更多