dgrid-select Selection 对我不起作用的原因可能是什么?
What could be the reason that dgrid-select Selection is not working for me?
我有这段代码:
define([
...
"MyGrid/lib/dgrid/Grid",
"MyGrid/lib/dgrid/Keyboard",
"MyGrid/lib/dgrid/Selection",
"MyGrid/lib/dgrid/extensions/Pagination",
"MyGrid/lib/dgrid/extensions/ColumnHider",
"MyGrid/lib/dgrid/extensions/ColumnResizer",
...
], function (declare, ..., dgrid, dgridKeyboard, dgridSelection,
dgridPagination, dgridColumnHider, dgridColumnResizer,
Memory, widgetTemplate) {
...
// creates the grid
_createGrid: function (columns, collection) {
this._grid = new CustomGrid({
className: "dgrid-autoheight",
columns: columns,
collection: collection,
firstLastArrows: true,
loadingMessage: "Loading...",
noDataMessage: "No results.",
pagingLinks: 2,
pageSizeOptions: [10, 15, 25],
pagingTextBox: false,
selectionMode: "toggle",
allowSelectAll: true
}, this.gridNode);
this._grid.startup();
},
...
// Attach events to HTML dom elements
_setupEvents: function () {
logger.debug(this.id + "._setupEvents");
...
this._selectEventListener = this._grid.on("dgrid-select", function (event) {
var rows, id;
console.log(event.grid.id + ": selected " + dojoArray.map(event.rows, function (row) {
return row.id;
}).join(", "));
console.log("selection: " + JSON.stringify(event.grid.selection, null, " "));
// Get the rows that were just selected
rows = event.rows;
console.log("selectionMode: " + event.grid.selectionMode);
console.log("Row entries: " + Object.entries(rows));
console.log("Row[0] entries: " + Object.entries(rows[0].element));
console.log("Selection: " + Object.entries(event.grid.selection));
// Iterate through all currently-selected items
for (id in event.grid.selection) {
if (event.grid.selection[id]) {
console.log("keys: " + Object.entries(event.grid.selection[id]));
}
}
});
},
...
// rerender the grid.
_renderGrid: function (objs) {
var objAttributes, gridColumns;
if (objs.length) {
objAttributes = objs[0].getAttributes();
if (this._grid) {
this._selectEventListener.remove();
this._errorEventListener.remove();
this._grid.destroy();
dojoConstruct.place(this.gridNode, this.domNode);
}
// Create header and content data.
gridColumns = this._createColumns(objAttributes);
this._gridStore = new Memory({
data: this._createData(objs, objAttributes, gridColumns)
});
this._createGrid(gridColumns, this._gridStore);
this._setupEvents();
}
},
// create grid HeaderData from retrieved objects.
_createColumns: function (objAttributes) {
var fieldname, columns, i;
columns = [
{field: "id", label: "ID"}
];
if (objAttributes) {
for (i in objAttributes) {
fieldname = objAttributes[i].toLowerCase().replace(".", "-");
columns.push({field: fieldname, label: objAttributes[i]});
}
}
return columns;
},
然而,选择真的参差不齐。
它仅适用于双击。以下是点击选择的结果:
dgrid_0: selected
selection: {
"undefined": true
}
selectionMode: toggle
Row entries: 0,[object Object]
Row[0] entries: rowIndex,0
Selection: undefined,true
keys:
如您所见,它只根据事件行选择选择,而不是通过询问 grid.selection。
多选也没有被拾取。
为什么没有注册?
我在这里怀疑的原因之一可能是 collection 中没有 idProperty
。如果要将 collection objects 的 id 映射到它,应该有 id
属性。如果要将其映射到不同的属性,则在创建 collection.
时定义 idProperty: otherProperty
我有这段代码:
define([
...
"MyGrid/lib/dgrid/Grid",
"MyGrid/lib/dgrid/Keyboard",
"MyGrid/lib/dgrid/Selection",
"MyGrid/lib/dgrid/extensions/Pagination",
"MyGrid/lib/dgrid/extensions/ColumnHider",
"MyGrid/lib/dgrid/extensions/ColumnResizer",
...
], function (declare, ..., dgrid, dgridKeyboard, dgridSelection,
dgridPagination, dgridColumnHider, dgridColumnResizer,
Memory, widgetTemplate) {
...
// creates the grid
_createGrid: function (columns, collection) {
this._grid = new CustomGrid({
className: "dgrid-autoheight",
columns: columns,
collection: collection,
firstLastArrows: true,
loadingMessage: "Loading...",
noDataMessage: "No results.",
pagingLinks: 2,
pageSizeOptions: [10, 15, 25],
pagingTextBox: false,
selectionMode: "toggle",
allowSelectAll: true
}, this.gridNode);
this._grid.startup();
},
...
// Attach events to HTML dom elements
_setupEvents: function () {
logger.debug(this.id + "._setupEvents");
...
this._selectEventListener = this._grid.on("dgrid-select", function (event) {
var rows, id;
console.log(event.grid.id + ": selected " + dojoArray.map(event.rows, function (row) {
return row.id;
}).join(", "));
console.log("selection: " + JSON.stringify(event.grid.selection, null, " "));
// Get the rows that were just selected
rows = event.rows;
console.log("selectionMode: " + event.grid.selectionMode);
console.log("Row entries: " + Object.entries(rows));
console.log("Row[0] entries: " + Object.entries(rows[0].element));
console.log("Selection: " + Object.entries(event.grid.selection));
// Iterate through all currently-selected items
for (id in event.grid.selection) {
if (event.grid.selection[id]) {
console.log("keys: " + Object.entries(event.grid.selection[id]));
}
}
});
},
...
// rerender the grid.
_renderGrid: function (objs) {
var objAttributes, gridColumns;
if (objs.length) {
objAttributes = objs[0].getAttributes();
if (this._grid) {
this._selectEventListener.remove();
this._errorEventListener.remove();
this._grid.destroy();
dojoConstruct.place(this.gridNode, this.domNode);
}
// Create header and content data.
gridColumns = this._createColumns(objAttributes);
this._gridStore = new Memory({
data: this._createData(objs, objAttributes, gridColumns)
});
this._createGrid(gridColumns, this._gridStore);
this._setupEvents();
}
},
// create grid HeaderData from retrieved objects.
_createColumns: function (objAttributes) {
var fieldname, columns, i;
columns = [
{field: "id", label: "ID"}
];
if (objAttributes) {
for (i in objAttributes) {
fieldname = objAttributes[i].toLowerCase().replace(".", "-");
columns.push({field: fieldname, label: objAttributes[i]});
}
}
return columns;
},
然而,选择真的参差不齐。 它仅适用于双击。以下是点击选择的结果:
dgrid_0: selected
selection: {
"undefined": true
}
selectionMode: toggle
Row entries: 0,[object Object]
Row[0] entries: rowIndex,0
Selection: undefined,true
keys:
如您所见,它只根据事件行选择选择,而不是通过询问 grid.selection。 多选也没有被拾取。
为什么没有注册?
我在这里怀疑的原因之一可能是 collection 中没有 idProperty
。如果要将 collection objects 的 id 映射到它,应该有 id
属性。如果要将其映射到不同的属性,则在创建 collection.
idProperty: otherProperty