刚刚注意到 knockout.js 中的一些意外行为 - 得到了一些循环 observableArray 的代码,并为数组中的每个项目重复一些绑定(bind)的 HTML 元素。其中一项是子对象的属性:
<tbody data-bind="foreach: Contact">
<tr>
<td data-bind="text: Name"></td>
<td data-bind="text: Project().Name"></td>
<td data-bind="text: Percentage"></td>
</tr>
</tbody>
这在页面加载时呈现良好。但是,如果用户执行的操作最终更改了 Contact 数组或其内部的项目,则 Name 和 Project().Name 会更新,但 Percentage 不会更新,即使单步执行显示它具有正确的值。
但是,如果我删除解压的子对象:
<tbody data-bind="foreach: Contact">
<tr>
<td data-bind="text: Name"></td>
<td></td>
<td data-bind="text: Percentage"></td>
</tr>
</tbody>
一切都很完美。
这里发生了什么,有没有比使用计算的可观察值或类似的东西来计算和保存我的 Project().Name 值更好的解决方案?
最佳答案
试试这个
<td data-bind="text: ko.computed(function() { return Project().Name() })"></td>
如果需要2路绑定(bind),可以使用可写计算
关于javascript - 解压属性后,Knockout 停止更新 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21308561/