使koGrid尊重可观察的属性

时间:2014-02-18 15:56:17

标签: javascript knockout.js kogrid

我一直在用kogrid编写应用程序,最近我将数据源从一个对象数组更改为一个淘汰对象数组。但是,当我更新对象中的可观察属性时,网格不会更新。

这是我的数据数组:

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

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

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

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

更新

我已经回答了问题below,但有没有人知道为什么kogrid会缓存未包装的值?

1 个答案:

答案 0 :(得分:0)

我查看了kogrid来源并在src/classes/row.js

中找到了这一行
self.getProperty = function (path) {
    return self.propertyCache[path] || (self.propertyCache[path] = window.kg.utils.evalProperty(self.entity, path));
};

看起来属性缓存正在缓存我们在默认cell template中访问的属性的展开值:

<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);
};