【问题标题】:Knockout unable to process binding淘汰赛无法处理绑定
【发布时间】:2015-03-23 11:27:22
【问题描述】:

如何绑定未定义的文本?例如名称不可用:

<table id="recordTbl" data-bind="visible: records().length &gt; 0" class="table">
  <thead>
    <tr>
      <th class="col-md-4">ID</th>
      <th class="col-md-4">Name</th>
    </tr>
  </thead>
  <tbody data-bind="foreach: records">
    <tr>
      <td data-bind="text: id"></td>
      <td data-bind="text: name"></td>
    </tr>
  </tbody>
</table>

我收到此错误:

Uncaught ReferenceError: Unable to process binding "text: function (){return name }"
Message: name is not defined 

【问题讨论】:

  • 你的意思是records数组中的某些项目没有name属性吗?
  • 有办法做到这一点吗?即使对象没有属性(如评论中的名称),我们可以做些什么来阻止异常吗? :O

标签: knockout.js


【解决方案1】:

你可以通过$data绑定上下文属性来访问name

  <tbody data-bind="foreach: records">
    <tr>
      <td data-bind="text: id"></td>
      <td data-bind="text: $data.name"></td>
    </tr>
  </tbody>

使用这种方法,如果records 中的一项没有name 属性,KO 不会抛出异常。

没有$data,名为name 的标识符是未定义的。然而$data.name 始终是一个有效的表达式,如果当前视图模型没有名为name 的属性,它只会返回undefined

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 2016-01-22
    • 2014-05-29
    • 2017-10-24
    • 2015-03-17
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多