0

我一直在用 kogrid 编写一个应用程序,最近我将我的数据源从一个对象数组更改为一个淘汰对象数组。然而,令我惊讶的是,当我更新对象中的可观察属性时,网格并没有更新。

这是我的数据数组:

self.gridData = ko.observableArray([
    { name: ko.observable("joe"), age: ko.observable(5) }
]);

当我更新年龄属性时,网格上没有任何反应:

self.gridData()[0].age(6);

有人对这是为什么有一个很好的答案吗?

更新

我已经回答了下面的问题,但是有谁知道为什么 kogrid 会缓存未包装的值?

4

1 回答 1

0

我查看了 kogrid 源代码并在src/classes/row.js中找到了这一行

self.getProperty = function (path) {
    return self.propertyCache[path] || (self.propertyCache[path] = window.kg.utils.evalProperty(self.entity, path));
};

看起来属性缓存正在缓存我们在默认单元格模板中访问的属性的未包装值:

<div data-bind="attr: { 'class': 'kgCellText colt' + $index()}, html: $data.getProperty($parent)"></div>

(注意:模板中的 $data 是列,它有一个用于 row.getProperty 的 getProperty 包装器)

我只是删除了缓存属性值的行,如下所示:

self.getProperty = function (path) {
    return window.kg.utils.evalProperty(self.entity, path);
};
于 2014-02-18T16:55:44.227 回答