【问题标题】:Make koGrid respect observable properties让 koGrid 尊重可观察的属性
【发布时间】:2014-02-19 00:59:12
【问题描述】:

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

这是我的数据数组:

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

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

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

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

更新

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

【问题讨论】:

  • gridData 不是字段吗?我从来没有真正使用过敲除,但你似乎把它当作一个函数来调用。
  • @rogue_js 那句语法其实很好,这是 Knockout 检索 observable 值的方式。
  • 您能否提供更多关于如何将所有内容连接在一起的信息,可能会创建一个复制品?您发布的代码看起来不错。
  • @Jeroen 我在下面的回答是否有助于使问题更有意义?你知道为什么要缓存这些值吗?
  • 嗯,缓存通常是为了提高性能,但无论如何都是适当的功能。如果缓存没有正确失效,那可能是 kogrid 中的错误,但错误也可能在您的代码中。没有复制就不可能说出来:-)

标签: javascript knockout.js kogrid


【解决方案1】:

我查看了 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是列,它有一个getProperty对row.getProperty的封装)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2017-09-07
    • 2014-02-01
    • 1970-01-01
    相关资源
    最近更新 更多