0

所以我是 dgrid 的第一次用户,我目前正在构建我的树形网格,如下所示:

var SelectionGrid = new declare([OnDemandGrid, Selection, Keyboard]);

    var myGrid = new SelectionGrid({
                        store: myStore,
                        selectionMode: "single",
                        style: {
                            width: '99%',
                            height: '99%'
                        },
                        columns: columns
                    });

我的问题是,网格显示了我在 openlayers 中绘制的功能的元数据。我已经在 openlayers 中编写了代码,因此每当我单击地图上的某个要素时,它都会触发一个事件以滚动到网格中的该项目并选择它。但是,网格不会为每个父项预加载子项,它仅在父行展开时获取子项。

目前我正在以编程方式扩展每一行,然后重新关闭它们以强制它获取,但它非常慢并且最终导致浏览器警告有关 javascript 运行时间过长等。

这是使用 OnDemandGrid 的副作用吗?无论如何只加载所有数据,以便在渲染网格时全部可用?

4

2 回答 2

1

我有另一个问题,想发布另一个答案,以防有人遇到同样的问题。当不使用 Tree 插件而仅使用 OnDemandGrid 时,我无法以编程方式滚动到网格中尚未加载的项目,因为该行的元素为空。

我找到了一个属性,它告诉 OnDemandGrid 从商店加载的最小项目数,并将其设置为我的数据长度,因此它一次加载所有内容。我知道这违背了 OnDemandGrid 的目的/好处,但这是我需要的功能。这是代码:

var SelectionGrid = new declare([OnDemandGrid, Selection, Keyboard, DijitRegistry]);
var grid = new SelectionGrid({
                    store: store,
                    selectionMode: "single",
                    columns: columns,
                    minRowsPerPage: data.length,
                    farOffRemoval: 100000
                });

下面是 minRowsPerPage 和 farOffRemoval 的参考:

http://dojofoundation.org/packages/dgrid/tutorials/grids_and_stores/

于 2013-06-25T16:13:58.290 回答
0

我无法预加载所有数据,但我刚刚发现了 dojo/aspect 的荣耀。现在我找到了需要扩展的父项,我只是在 aspect/after 块中构建了一些代码,该代码在该行完成扩展/加载后立即执行:

aspect.after(grid, "expand", function (target, expand) {
                var row = grid.row(id);
                console.info("found row: ", row)
                grid.bodyNode.scrollTop = row.element.offsetTop;
                grid.clearSelection();
                grid.select(row);
                         }, 
                true); 
  grid.expand(item.id, true);
于 2013-05-25T04:51:12.373 回答