SlickGrid支持可以配置为单击或双击显示的单元格的编辑器。但是我没有看到一个选项,其中,编辑器默认情况下为所有单元格可见,而不必单击/双击单元格。SlickGrid - 带控件的可编辑网格默认情况下是可见的
- 是否有可能支持编辑器默认情况下编辑器为 “光荣网格”的编辑器所有单元格?
- 是否有已知的解决方法?
谢谢。
SlickGrid支持可以配置为单击或双击显示的单元格的编辑器。但是我没有看到一个选项,其中,编辑器默认情况下为所有单元格可见,而不必单击/双击单元格。SlickGrid - 带控件的可编辑网格默认情况下是可见的
谢谢。
不可以。网格设计为一次可编辑一个单元格。
我知道这不是你要求的,但我想我会添加下面的代码以防万一有人发现它有用。这是一种半解决方法,它至少让用户在网格周围导航,并开始在单元格中输入内容进行编辑,而不必通过按Enter键或双击单元格来“初始化”编辑;有点像编辑一个MS Excel工作表。
myGrid.onKeyDown.subscribe(function (e, args) {
var keyCode = $.ui.keyCode,
col,
activeCell = this.getActiveCell();
/////////////////////////////////////////////////////////////////////
// Allow instant editing like MS Excel (without presisng enter first
// to go into edit mode)
if (activeCell) {
col = activeCell.cell;
// Only for editable fields and not if edit is already in progress
if (this.getColumns()[col].editor && !this.getCellEditor()) {
// Ignore keys that should not activate edit mode
if ($.inArray(e.keyCode, [keyCode.LEFT, keyCode.RIGHT, keyCode.UP,
keyCode.DOWN, keyCode.PAGE_UP, keyCode.PAGE_DOWN,
keyCode.SHIFT, keyCode.CONTROL, keyCode.CAPS_LOCK,
keyCode.HOME, keyCode.END, keyCode.INSERT,
keyCode.TAB, keyCode.ENTER]) === -1) {
this.editActiveCell();
}
}
}
}
嗨Njr,不完全是我们想要的,但是这很有趣。感谢分享这个。我们可能能够很好地使用其他项目。 –
下面是我结束了(改进版本njr101的答案),使这项工作。我添加了一个CTRL键的检查,因此它不会打破我在网格上使用的复制粘贴插件。
function (e) {
var keyCode = $.ui.keyCode,
col,
activeCell = this.getActiveCell(),
activeCellNode = this.getActiveCellNode();
var isInEditMode = $(activeCellNode).hasClass("editable");
if (activeCell && !isInEditMode) {
col = activeCell.cell;
if (this.getColumns()[col].editor && !e.ctrlKey) {
if ($.inArray(e.keyCode, [keyCode.LEFT, keyCode.RIGHT, keyCode.UP,
keyCode.DOWN, keyCode.PAGE_UP, keyCode.PAGE_DOWN,
keyCode.SHIFT, keyCode.CONTROL, keyCode.CAPS_LOCK,
keyCode.HOME, keyCode.END, keyCode.INSERT,
keyCode.TAB, keyCode.ENTER]) === -1) {
this.editActiveCell();
}
}
}
};
不要忘记订阅:
slickGrid.onKeyDown.subscribe();
更新使用编辑器定义行的元数据,而不是在列定义。
在我的情况下,一行两个包含在单元格1文本编辑器和一行两个不包含任何内容。
grid.onKeyDown.subscribe(function (e, args) {
var keyCode = $.ui.keyCode;
var activeCell = this.getActiveCell();
if(activeCell) {
// get metadata
var columnDefinition = grid.getColumns()[ activeCell.cell ];
var rowMetadata = dataView.getItemMetadata && dataView.getItemMetadata(activeCell.row);
var rowColMetadata = rowMetadata && rowMetadata.columns;
rowColMetadata = rowColMetadata && (rowColMetadata[ columnDefinition.id ] || rowColMetadata[ activeCell.cell ]);
if (rowColMetadata && rowColMetadata.editor && !this.getCellEditor()) {
if($.inArray(e.keyCode, [keyCode.LEFT, keyCode.RIGHT, keyCode.UP, keyCode.DOWN, keyCode.PAGE_UP, keyCode.PAGE_DOWN,
keyCode.SHIFT, keyCode.CONTROL, keyCode.CAPS_LOCK, keyCode.HOME, keyCode.END, keyCode.INSERT,
keyCode.TAB, keyCode.ENTER]) === -1) {
this.editActiveCell();
}
}
}
});
谢谢你的回应......我目前正在尝试一个解决方案来模拟一个格式编辑器作为编辑器 - 比需要更复杂,但我想它应该做的伎俩。 –
只要确保没有将任何事件侦听器直接附加到由SlickGrid生成的DOM上,或者以任何方式在外部修改它。滚动时,SlickGrid会销毁并重新创建行节点。使用网格提供的事件或在容器上侦听(即使用事件委托)。 – Tin
当然,非常感谢Tin,我们实际上学到了一些难以实现的方法......因为我们需要将事件与某些DOM节点相关联。我们可能不得不为此执行一些遗憾的解决方法。 我们在Formatter的返回值中打开了DOM支持的功能请求,我相信它会在GitHib站点上回复给您:D 我不确定推荐是否100%可能,但我们已经提出了一张票(Feature请求)。 Ticket:https://github.com/mleibman/SlickGrid/issues/269 –