刚刚注意到knockout.js中的一些意外行为 - 得到一些循环遍及observableArray的代码,并为数组中的每个项重复一些绑定的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()。名称更新但Percentage不会,即使单步执行显示它具有正确的值。
但是,如果我删除解压缩的子对象:
<tbody data-bind="foreach: Contact">
<tr>
<td data-bind="text: Name"></td>
<td></td>
<td data-bind="text: Percentage"></td>
</tr>
</tbody>
一切都很完美。
这里发生了什么,并且是否有比使用计算的observable更好的解决方案或某些计算并保持我的Project()。名称值?
答案 0 :(得分:0)
试试这个
<td data-bind="text: ko.computed(function() { return Project().Name() })"></td>
如果您需要双向绑定,则可以使用可写计算