cellRenderer实际上与排序没有任何关系;正如Niall指出的那样,您需要修改列定义以使用自定义排序功能。从example code,假设你正在与第一例子的工作,让你的运动员columnDef看起来是这样的:
var columnDefs = [
{headerName: "Athlete", field: "athlete", width: 150, sort: 'desc'},
...
];
你需要一个比较添加到columnDef:
{headerName: "Athlete", field: "athlete", width: 150, sort: 'desc',
comparator: function(valueA, valueB, nodeA, nodeB, isInverted)
{return caseInsensitiveSort(valueA, valueB, nodeA, nodeB, isInverted);}
}
,然后在下面添加你的函数进行排序。
function caseInsensitiveSort(valueA, valueB, nodeA, nodeB, isInverted) {
return valueA.toLowerCase().localeCompare(valueB.toLowerCase());
}
请注意,即使您不必使用它们,也要传递节点和isInverted,因为这是ag-grid所期望的签名。
你会使用isInverted标志的情况是,如果你需要分别处理某些值,如空白或空值。下面是这些值排序的底部更详细的功能,无论方向:
function caseInsensitiveSort(valueA, valueB, nodeA, nodeB, isInverted) {
if(valueA === "" || valueA === null) {
if(valueB === "" || valueB === null) {
return 0; // a and b are both blank; 0 means identical
} else {
return (isInverted ? -1 : 1); // a is null, b is not; return 1 for normal sort or -1 for inverted
}
}
if(valueB === "" || valueB === null) {
return (isInverted ? 1 : -1); // b is null, a is not; return -1 for normal or 1 for inverted to get the opposite result as above
}
return valueA.toLowerCase().localeCompare(valueB.toLowerCase());
};
你也可以设置比较作为列类型的一部分,然后应用列类型的columnDef;这样,您可以轻松地跨多个列使用相同的排序功能。
var columnDefs = [
{headerName: "Athlete", field: "athlete", width: 150, sort: 'desc', type: 'text'},
...
];
var gridOptions = {
columnDefs: columnDefs,
... // whatever else you set
columnTypes: {
"text": {comparator: function(valueA, valueB, nodeA, nodeB, isInverted)
{return caseInsensitiveSort(valueA, valueB, nodeA, nodeB, isInverted);}
}
};
我有一个明显更复杂的例子,我刚刚在当前的项目中使用;如果时间允许的话,我会把它缩小一点,以便让你看到整个事情是如何工作的。一旦你知道自己在做什么,ag-grid文档就非常有用,但是它所包含的信息经常分布在多个页面中,并没有太多的例子能够向你显示你需要知道的内容。
如果您希望默认启用排序,除比较器属性外,还可以添加'sort:'desc''或'sort:'asc'' –
@Niall Crosby:您能否提供一个punker来演示您的答案?帮助很多。 – Developer