Knockout在解压缩属性后停止更新observable

时间:2014-01-23 12:44:53

标签: javascript knockout.js

刚刚注意到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()。名称值?

1 个答案:

答案 0 :(得分:0)

试试这个

<td data-bind="text: ko.computed(function() { return Project().Name() })"></td>

如果您需要双向绑定,则可以使用可写计算