Knockout无法解析foreach

时间:2016-10-04 12:45:18

标签: knockout.js

我正在使用Knockout和Knockout-REST(它执行映射并使所有对象都可观察):

<script> var regosViewModel = new RegosViewModel();</script>

<span data-bind="text: regos().list()[0].rid()"></span>

<table class="table table-striped">
<thead><th>rid</th></thead>

<div data-bind="foreach: regos().list()">
<tr><td data-bind="text: rid()"></td></tr>

<script>ko.applyBindings(regosViewModel);</script>

跨度返回数字1,但尝试在下面的foreach循环中执行相同操作会导致“错误:无法解析绑定。 消息:ReferenceError:找不到变量:rid; 绑定值:text:rid()“。

任何人都可以解释原因吗?值得注意的是,text:$ index也有相同的绑定错误。

1 个答案:

答案 0 :(得分:2)

table元素进行数据绑定时,您必须确保它生成有效的html。 table无法直接持有div。试试这个:

<table class="table table-striped">
  <thead>
    <tr>
      <th>rid</th>
    </tr> 
  </thead>
  <tbody data-bind="foreach: regos().list()">
    <tr>
      <td data-bind="text: rid()"></td>
    </tr>
  </tbody>
</table>

查看此示例,该示例显示无效的表格标记不会呈现:

&#13;
&#13;
ko.applyBindings({ arr: [{label: "label 1"}, {label: "label 2"}] });
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<h3>Valid table:</h3>
<table>
  <tbody data-bind="foreach: arr">
    <tr>
      <td data-bind="text: label"></td>
    </tr>
  </tbody>
</table>

<h3>Invalid table</h3>
<table>
  <div data-bind="foreach: arr">
    <tr>
      <td data-bind="text: label"></td>
    </tr>
  </div>
</table>
&#13;
&#13;
&#13;