【问题标题】:How to refresh dojo gridx after the memory store has changed?内存存储更改后如何刷新dojo gridx?
【发布时间】:2013-07-03 14:39:54
【问题描述】:

我正在使用 dojo 1.9gridx。网格使用内存存储进行初始化。但是当数据发生变化时,我更新了商店,但我看到网格没有任何变化。它没有refresh() 方法(如dgrid)。但是,我发现了以下顺序:

            grid.model.clearCache();
            grid.model.setStore(store)
            grid.body.refresh()

这会导致网格显示Loading... 消息,但没有任何反应。

但是,分页器显示正确的页数,只有网格容器没有呈现行。

带有来自 gridx 源的过滤器 /gridx/tests/test_grid_filter.html 的示例有同样的问题:Loading... 消息,但没有数据。

所以第一个问题是,这是一个错误吗?如果不是错误,我应该如何告诉网格数据已更改并且应该重新加载?

【问题讨论】:

    标签: javascript dojo dojo.gridx


    【解决方案1】:

    我之前的回答有效,从点赞数来看,它对其他人很有用,但我发现了更简单的方法,不需要重新创建商店:

    grid.model.clearCache();
    grid.model.store.setData(items)
    grid.body.refresh()
    

    关键操作是清除缓存、设置新项目、强制刷新浏览器。

    令人困惑的是,GridX 具有“存储”属性,但它不是用于呈现数据的对象。实际对象是模型上设置的store,所以这是你需要修改的对象。

    【讨论】:

    • 直到我在 grid.model.store.setData(items) 之前添加了 grid.setStore(items); 之后才能使用
    【解决方案2】:

    Loading... 消息是由我声明网格的方式引起的。我已经指定了columns 属性,structure 需要在第一行声明。

    刷新序列太短。您还需要重新创建数据存储:

    var storeData = {
        identifier: 'id',
        items: response.items
    };
    grid.model.clearCache();
    storeData.items = data.result
    store = new Memory({data: storeData});
    grid.model.setStore(store)
    grid.body.refresh()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多