我有一个ag-grid表,在加载网格中的数据后,必须根据某些条件在其中选择复选框。我使用processRowPostCreate
是因为它允许在创建行之后对其进行处理。我使用node.setSelected(true)
来更新值。我做了console.log来查看node.selected值,然后看到该值为true。但是,UI仍未显示选中的复选框。
以下是网格选项和processRowPostCreate
回调:
var dataTableOptions = {
columnDefs: dataTableColDefn,
suppressMovableColumns: true,
rowSelection: 'multiple',
rowMultiSelectWithClick: true,
deltaRowDataMode: true,
floatingFilter: false,
rowModelType: 'infinite',
rowDragManaged: true,
maxConcurrentDatasourceRequests: 1,
maxBlocksInCache:1,
cacheBlockSize: 25,
pagination: true,
paginationPageSize: 25,
onRowClicked: function(event) {
resetRowVal(event);=
},
components: {
'cgStateCellRenderer': CgStateCellRenderer,
},
processRowPostCreate: (params) => {
if(params.rowIndex > 0){
params.node.setSelected(true);
}
console.log(params);
}
};
如果我在setTimeout
回调中添加processRowPostCreate
,则效果很好。但这不是解决此问题的好方法。
processRowPostCreate: (params) => {
setTimeout(function(){
if(params.rowIndex > 0){
params.node.setSelected(true);
}
}, 2000);
}
答案 0 :(得分:0)
我还没有使用processRowPostCreate
,所以我不能直接对此发表评论,但是我发现AgGrid回调相当普遍,如果您在回调中调用网格API,则必须这样做setTimeout
以确保您的api调用在当前的JavaScript处理循环之后发生,并且如果不执行此操作,则网格可能会以意外的方式运行,或者似乎只是忽略了您的api调用。
也就是说,您通常不必提供超时延迟-默认值为零应该使您进入处理循环的下一次迭代。
实际上,将延迟设置为零以外的值是不可靠的,因为您无法预测正在运行应用程序的客户端的处理速度。
所以,我建议更换
processRowPostCreate: (params) => {
setTimeout(function(){
if(params.rowIndex > 0){
params.node.setSelected(true);
}
}, 2000);
}
使用
processRowPostCreate: (params) => {
setTimeout(function(){
if(params.rowIndex > 0){
params.node.setSelected(true);
}
});
}
如果该方法始终有效,那可能是最好的解决方案。
如果它不起作用,则可以尝试创建要选择的rowId列表,
然后稍后在列表中的每个项目上调用setSelected
方法,
如果您找到了一种可预测的方式来做到这一点而又不求助于指定的时间延迟(例如,如果存在适当的情况,则是对另一个事件的响应)。