dgrid 总是显示比现在少一条记录

dgrid always showing one record less then present

我正在使用 dgrid 如下:

        query_grid: function(json_query, target, select){
        var self = this;
        require(["dojo/_base/declare", 
                 "dgrid/Grid",
                 "dgrid/extensions/ColumnResizer", 
                 "dgrid/Selection", 
                 "dgrid/selector",
                 "dgrid/extensions/DijitRegistry",
                 "dgrid/extensions/Pagination"], 
            function(declare, Grid, ColumnResizer, Selection, selector, DijitRegistry, Pagination){
                util.destroy("grid_"+json_query.path);
                var columns = {};
                if (select){
                    columns.widget = selector({
                        id: "widget",
                        label: " ",
                        selectorType: "radio", 
                        resizeable: false, 
                        width: 30});
                }
                var data = json_query.data;
                for (var i=0; i<data.keys.length; i++){
                    columns[data.keys[i]] = {label: util.slice_path(data.keys[i], 2)};
                }
                var grid = new (declare([Grid, ColumnResizer, Selection, DijitRegistry, Pagination]))({
                    id: "grid_"+json_query.path,
                    columns: columns,
                    store:  new Memory({data: data.records}),
                    selectionMode: select?"single":"none",
                    pagingLinks: 1,
                    pagingTextBox: true,
                    firstLastArrows: true
                });
                dojo.place(grid.domNode, target, 'last');
                grid.refresh();
            }
        );
        return json_query.path;
    }

但是当我查看结果时,它总是显示一条记录,然后出现,直到我点击一列 header(导致排序),然后显示所有记录。谁能解释或帮助 solution/workaround?

grid.refresh() 替换为 grid.startup()

dgrid 将自动调用 startup 如果实例在创建后立即处于文档流中。这里不是这种情况,因为你是在之后放置它,所以你需要在它进入流程后调用 startup 来告诉它它可以执行 geometry-sensitive 操作。

如果不调用 startupresize 最初就不会被调用。结果,网格没有正确说明 header/footer 的高度,并且您的 10 行中的其中一行被混淆了。它在排序时得到修复,因为 dgrid/Grid_setSort 方法调用 resize 以防 header 行的大小因排序箭头的位置而改变。

在这种情况下,您可以将 refresh 替换为 startup 的原因是因为 startup 无论如何都会调用 refresh