我的问题主要围绕文档中关于反应组件的这个声明:
单元格编辑器参数
onKeyDown回调告诉网格按下了一个键 - 用于将控制键事件(选项卡、箭头等)传递回网格 - 但是您不需要调用它,因为网格已经在监听事件传播时。仅当您要阻止事件传播时才需要这样做。
我知道 cellEditor 参数作为传递给组件的反应版本的道具而存在,但我似乎找不到如何按照文档中的指定附加到onKeyDown 。在我的 cellEditor 的构造函数中,onKeyDown 函数存在并且与列定义中的onKeyDown
指定匹配cellEditorParams
(如果存在)。
constructor(props) {
super(props);
// console.log(typeof props.onKeyDown == 'function') => 'true'
}
但如果它只是存在于组件中,则永远无法达到
onKeyDown(event) {
console.log('not reached');
}
如果我将输入放在onKeyDown={this.props.onKeyDown}
顶级包装 div 中,它确实会被调用,但它仍然没有捕捉到“Enter”键。
我尝试收听包含我的自定义单元格编辑器的单元格
this.props.eGridCell.addEventListener('keyup', (event) => {
console.log(event.keyCode === 13)
})
哪个确实捕获了输入,但是在我可以捕获字段内的最终输入之前按下输入时它似乎卸载了?我已经看到这也不起作用的行为,所以我很困惑。
我目前有一个简单的单元格编辑器MyCellEditor,除了选项卡之外,我正在尝试在按下 Enter 键时聚焦并选择下一个单元格。我已经有能力从 rowRenderer 中提取我需要的属性,rowIndex
然后我会在其中使用,例如:column
this.props.api.rowRenderer
this.props.api.rowRenderer.moveFocusToNextCell(rowIndex, column, false, false, true);
我的问题是默认情况下从“Enter”按下阻止事件传播的位置。
下面是我的单元格编辑器和用法。
import React from 'react';
import _ from 'lodash';
class MyCellEditor extends React.Component {
constructor(props) {
super(props);
this.state = {
value: props.value,
};
}
getValue() {
return this.state.value;
}
isPopup() {
return false;
}
isCancelBeforeStart() {
return false;
}
afterGuiAttached() {
const eInput = this.input;
eInput.focus();
eInput.select();
}
onKeyDown(event) {
// Never invoked!
}
onChangeListener = (e) => {
this.setState({ value: e.target.value });
}
render() {
return (
<input
ref={(c) => { this.input = c; }}
className="ag-cell-edit-input"
type="text"
value={this.state.value}
onChange={this.onChangeListener} />
);
}
}
export default MyCellEditor;
列定义:
columnDefs = [{
headerName: 'CustomColumn',
field: 'customField',
editable: true,
cellClass: 'grid-align ag-grid-shop-order-text',
sortable: false,
cellEditorFramework: MyCellEditor,
// Do I need cellEditorParams?
cellEditorParams: {
// onKeyDown: (event) => console.log('does not output')
}
},
...
}
反应:
<AgGridReact
columnDefs={columnDefs}
rowData={this.props.rows}
enableColResize="false"
rowSelection="single"
enableSorting="false"
singleClickEdit="true"
suppressMovableColumns="true"
rowHeight="30"
// onKeyDown also does nothing here
onGridReady={this.onGridReady}
onGridResize={() => console.log('grid resized')}
onColumnResize={() => console.log('column resized')} />