【发布时间】:2017-04-08 02:34:11
【问题描述】:
我的问题主要围绕文档 w.r.t 中的 this statement。反应组件:
cellEditor 参数
onKeyDown 回调告诉网格一个键被按下 - 有用传递 控制键事件(选项卡、箭头等)回到网格 - 但是你没有 需要调用它,因为网格已经在监听事件 他们传播。仅当您要阻止事件时才需要这样做 传播。
我知道 cellEditor 参数作为传递给组件的反应版本的道具而存在,但我似乎无法找到如何附加到文档中指定的 onKeyDown 。在我的 cellEditor 的构造函数中,存在 onKeyDown 函数并匹配列定义中 cellEditorParams 中指定的 onKeyDown(如果存在)。
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 键时选择下一个单元格,而不仅仅是选项卡。我已经有能力从this.props.api.rowRenderer 的rowRenderer 中提取我需要的rowIndex 和column 属性,然后我可以像这样使用:
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')} />
【问题讨论】:
标签: reactjs ag-grid ag-grid-react