我使用dgrid以网格格式显示数据,它有四列。一切都是可编辑的
我使用以下方式声明它。
<table id="grid" data-dojo-type="dgrid.CustomGrid" data-dojo-props="store: memoryStore">
<thead>
<tr>
<th data-dgrid-column="dgrid.editor({ field: 'id' }, dijit.form.TextBox, 'click')">ID</th>
<th data-dgrid-column="dgrid.editor({ field: 'name' }, dijit.form.TextBox, 'click')">Name</th>
<th data-dgrid-column="dgrid.editor({ field: 'description' }, dijit.form.TextBox, 'click')">Description</th>
</tr>
</thead>
</table>
我的问题是,当我编辑第一列时,编辑后应将焦点设置在第二列并在该单元格中显示光标,以便我可以开始编辑第二列;同样是第三列。
我对dojo和dgrid非常新。我在sitepen上找到了一些API,但无法解决我的问题
请帮我解决这个问题
答案 0 :(得分:5)
开始时有dgrid/Grid::edit(cell)
方法。
我使用dojo/aspect::after
将一个事件监听器添加到编辑器窗口小部件(例如dijit/form/TextBox
),如果它不存在,则监听keypress
事件以获取特定密钥,在我的情况下 TAB ,然后使用下一个应编辑的单元格调用grid.edit(cell)
。
请参阅jsFiddle的一个工作示例:http://jsfiddle.net/phusick/2jU7R/
它还远没有完成,但至少它可以提供一个可能的直接。使用双击进行编辑,编辑时按 TAB 跳转到下一个单元格。
aspect.after(grid, "edit", function(promise, cellNode) {
if(promise === null) return;
promise.then(function(widget) {
if (!widget._editorKeypressHandle) {
widget._editorKeypressHandle = widget.on("keypress", function(e) {
for (var rowId in grid.selection) { break;}
for (var columnId in grid.selection[rowId]) { break;}
if(e.charOrCode == keys.TAB) {
e.preventDefault();
var cellEdited = grid.cell(rowId, columnId);
var cellToEdit = grid.right(cellEdited, 1);
if(cellEdited.row.id == cellToEdit.row.id
&& cellEdited.column.id == cellToEdit.column.id
) {
// go to next line
for(var firstColumnId in grid.columns) { break;}
var nextRow = grid.down(cellEdited.row, 1);
cellToEdit = grid.cell(nextRow, firstColumnId);
};
grid.deselect(cellEdited);
grid.select(cellToEdit);
grid.edit(cellToEdit);
}
})
}
});
});
答案 1 :(得分:0)
这是另一种选择。还包括旧版dgrid中文本选择错误的解决方法。
postCreate: function() {
var that = this;
this.inherited(arguments);
// FIXME Workaround bug in dgrid that causes the grid to lose
// focus after each save.
this.on('dgrid-datachange', function(evt) {
that._selectedCell = that.cell(evt);
});
aspect.after(this, 'save', function(dfd) {
dfd.then(function() {
var nextCell = that.right(that.cell(that._selectedCell.row.id, that._selectedCell.column.id));
that.edit(nextCell);
// FIXME Workaround dgrid bug that blocks field text to be selected on focus.
nextCell.element.widget && nextCell.element.widget.textbox && nextCell.element.widget.textbox.select();
});
});
}