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 操作。
如果不调用 startup
,resize
最初就不会被调用。结果,网格没有正确说明 header/footer 的高度,并且您的 10 行中的其中一行被混淆了。它在排序时得到修复,因为 dgrid/Grid
的 _setSort
方法调用 resize
以防 header 行的大小因排序箭头的位置而改变。
在这种情况下,您可以将 refresh
替换为 startup
的原因是因为 startup
无论如何都会调用 refresh
。
我正在使用 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 操作。
如果不调用 startup
,resize
最初就不会被调用。结果,网格没有正确说明 header/footer 的高度,并且您的 10 行中的其中一行被混淆了。它在排序时得到修复,因为 dgrid/Grid
的 _setSort
方法调用 resize
以防 header 行的大小因排序箭头的位置而改变。
在这种情况下,您可以将 refresh
替换为 startup
的原因是因为 startup
无论如何都会调用 refresh
。