ExtJS Sencha表格UUID列自定义排序问题求助
修正ExtJS UUID列自定义排序的方案
要实现和数据库一致的排序逻辑(降序时空值/空白在前,无短横线UUID次之,带短横线UUID最后),需要重新编写sortType函数,通过给不同类型的UUID分配排序前缀来控制优先级:
核心思路
通过sortType将原始UUID值转换为带优先级前缀的字符串,ExtJS会基于转换后的值排序:
- 空值/空白项:分配最高优先级前缀(如
'3'),降序时排在最前 - 无短横线的UUID:分配中间优先级前缀(如
'2'),排在空值之后 - 带短横线的UUID:分配最低优先级前缀(如
'1'),排在最后
修正后的代码
替换原uuid字段的sortType函数:
Ext.define('Traccar.model.MyModel', { extend: 'Ext.data.Model', identifier: 'negative', fields: [{ // 其他字段... }, { name: 'uuid', type: 'string', sortType: function(actualValue) { // 处理空值、空白或全空格的情况 if (Ext.isEmpty(actualValue) || actualValue.trim() === '') { return '3'; } // 判断是否包含短横线 if (actualValue.indexOf('-') === -1) { // 无短横线的UUID,添加中间优先级前缀 return '2' + actualValue; } else { // 带短横线的UUID,添加最低优先级前缀 return '1' + actualValue; } } }] });
逻辑说明
- 空值处理:使用
Ext.isEmpty判断空值,同时处理全空格的情况,返回'3',确保降序时这类值排在最前 - 无短横线UUID:添加前缀
'2',在排序时会排在'3'之后、'1'之前 - 带短横线UUID:添加前缀
'1',排序时排在最后 - 同一优先级内的UUID会按照原始字符串的自然顺序排序,和数据库的字符串排序逻辑一致
内容的提问来源于stack exchange,提问作者TheOldBlackbeard
相关产品推荐
相关产品推荐

