javascript - 解压属性后,Knockout 停止更新 observable

标签 javascript knockout.js

刚刚注意到 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/

相关文章:

javascript - 具有多个动态字段的文本框或文本区域

javascript - 使用 Vue JS 复制输入字段,增加索引

javascript - 如何在 Ember 中导入全局变量?

knockout.js - 自定义绑定(bind)处理程序,从字符串模板呈现绑定(bind)

javascript - KnockoutJS 从可观察数组中删除项目。 Item是ul里面的listitem,是foreach生成的

javascript - D3+Leaflet map.on() 问题 - 在拖动事件期间(或之后)运行函数

jquery - knockout + Jquery 验证

javascript - 根据某些条件,Knockout JS 绑定(bind)到可观察对象内的数组元素

javascript - ko.mapping 未定义

javascript - .getAll(...).then 不是一个函数