ag-grid - 为 AG Grid agSetColumnFilter 填充过滤器值的问题
问题描述
我正在尝试填充 agSetColumnFilter 的值,但我收到一个错误,我无法在文档(或在线任何地方)中找到任何内容。有没有人遇到过这个问题?
这是列定义的样子:
columnDefs.push({
headerName: col.name,
field: col.name,
def: col,
rowGroup: k < groupedColumnCount ? true : false,
pinned: k < _this.groupBy.length ? 'left' : null,
lockPinned: k < _this.groupBy.length ? true : false,
hide: k < groupedColumnCount ? true : false,
suppressToolPanel: _this.groupBy.length ? true : false,
valueGetter: function(data){
if(data.data){
var def = data.colDef.def;
var value = data.data[data.colDef.field];
if(value){
return value.value;
}else{
return null;
}
}else{
return data.value;
}
},
valueFormatter: function(data){
if(data.data){
var def = data.colDef.def;
var value = data.data[data.colDef.field];
if(!value) return null;
if(value.formatted){
_this.cache[data.colDef.field + value.value] = value.formatted;
}
return value.formatted ? value.formatted : value.value;
}else{
if(_this.cache[data.colDef.field + data.value]){
return _this.cache[data.colDef.field + data.value];
}else{
return data.value;
}
}
},
keyCreator: function(params){
console.log(params);
},
filter: 'agSetColumnFilter',
filterParams: {
values: function (params) {
params.success([{
$uri: 'nhuihi',
value: {
$value: 'some text'
}
}]);
}
}
});
我现在只打印出 keyCreator 参数,因为我不知道数据中实际可用的内容。这个想法是我可以使用从服务器返回的复杂对象设置值并显示格式化的值而不是键。这是我得到的错误。
ag-grid-enterprise.min.noStyle.js:formatted:27684 Uncaught TypeError: Cannot read property 'onFilterValuesReady' of undefined
at t.setFilterValues (ag-grid-enterprise.min.noStyle.js:formatted:27684)
at e.modelUpdatedFunc (ag-grid-enterprise.min.noStyle.js:formatted:27609)
at e.onAsyncValuesLoaded (ag-grid-enterprise.min.noStyle.js:formatted:27917)
at values (comparison-table-v7.js:1253)
at e.createAllUniqueValues (ag-grid-enterprise.min.noStyle.js:formatted:27909)
at new e (ag-grid-enterprise.min.noStyle.js:formatted:27867)
at t.initialiseFilterBodyUi (ag-grid-enterprise.min.noStyle.js:formatted:27608)
at t.init (ag-grid-enterprise.min.noStyle.js:formatted:18945)
at e.initialiseComponent (ag-grid-enterprise.min.noStyle.js:formatted:10602)
at e.createAgGridComponent (ag-grid-enterprise.min.noStyle.js:formatted:10574)
这也是它的一个测试用例。我只是通过 AG Grid 修改了示例。https://plnkr.co/edit/GURQHP0KKFpJ9kwaU83M?p=preview
如果你打开控制台,当你点击运动员过滤器时,你会看到一个错误。
GitHub上也有报道:https ://github.com/ag-grid/ag-grid/issues/2829
解决方案
如果您需要在没有异步请求的情况下配置过滤器值
filterParams: {
values: getFilterValuesData()
}
getFilterValuesData(){
//data preparation
//little bit modified sample to present that you can handle your logic here
let data = [];
[
'John Joe Nevin',
'Katie Taylor',
'Paddy Barnes',
'Kenny Egan',
'Darren Sutherland',
'Margaret Thatcher',
'Tony Blair',
'Ronald Regan',
'Barack Obama'
].forEach(i=>{
data.push(i);
});
return data;
}
如果需要为数据准备发出异步请求,您可以使用callback
函数:
filterParams: {
values: (params)=>{
setTimeout(()=>{ -- setTimeout on this case only for async request imitation
params.success(['value 1', 'value 2'])
}, 5000)
}
}
注意:
params.success(...)
只能与异步请求一起使用
推荐阅读
- c - 如何测试 C 中的输入字符串是否具有正确的“格式”?
- security - Twilio 安全功能
- python - 尝试在 Docker 容器中运行 Selenium-pytest 时出现 KeyError
- node.js - 猫鼬不保存模型
- sql - 从 PostgreSQL 中的嵌套 JSON 数组中获取所有值
- javascript - 根据 Javascript 和 Elementor 的选择更改href
- swift - 如何访问
使用 PocketSVG 的 SVG 资源的属性? - pandas - 将两个 Pandas 列转换为 yyyy-mm-dd HH:MM:SS
- javascript - 清理代码的最佳方法是什么?
- android - 获取主屏幕小部件元素的尺寸