extjs4.1 根据用户定义的标准对商店进行排序

Posted

技术标签:

【中文标题】extjs4.1 根据用户定义的标准对商店进行排序【英文标题】:extjs4.1 sort a store based on user defined criteria 【发布时间】:2012-12-10 23:14:28 【问题描述】:

有人可以帮我根据用户定义的标准对商店进行分类吗?

Ext.define('Role', 
    extend: 'Ext.data.Model',
    fields: [
        name: 'role_id', type: 'int',
        name: 'role_name',  type: 'string'
    ]
)

返回的role_name是admin,user,read-only,super 我想把它排序为

只读,用户,管理员,超级。

【问题讨论】:

包含一个通用标签,以便吸引更多专家。 extjs4.1 只有 104 个关注者。但是extjs 1.5k。 【参考方案1】:

您可以使用 sort() 方法对其进行排序,如下所示:

Ext.define('Role', 
    extend: 'Ext.data.Model',
    fields: [
        name: 'role_id', type: 'int',
        name: 'role_name',  type: 'string'
    ]
)

var store = Ext.create('Ext.data.Store', 
    model: 'Role',    
    data: [             // non-sorted data
        [ 1, 'user' ],
        [ 2, 'super' ],
        [ 3, 'read-only' ],
        [ 4, 'admin' ]                
    ]
);

// sort the store
store.sort([
    sorterFn: function(v1, v2) 
        var order = ['read-only', 'user', 'admin', 'super'],
            v1o   = order.indexOf(v1.get('role_name')),
            v2o   = order.indexOf(v2.get('role_name'));           

        return v1o < v2o ? -1 : 1;; 
    
]);

console.log(store.data);

​您可以在这里看到它的工作原理:http://jsfiddle.net/lontivero/wGc2D/4/

祝你好运!

【讨论】:

【参考方案2】:

这在文档中有介绍,使用自定义排序类型:

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Field-cfg-sortType

// current sort     after sort we want
// +-+------+          +-+------+
// |1|First |          |1|First |
// |2|Last  |          |3|Second|
// |3|Second|          |2|Last  |
// +-+------+          +-+------+

sortType: function(value) 
   switch (value.toLowerCase()) // native toLowerCase():
   
      case 'first': return 1;
      case 'second': return 2;
      default: return 3;
   

【讨论】:

以上是关于extjs4.1 根据用户定义的标准对商店进行排序的主要内容,如果未能解决你的问题,请参考以下文章

使用标准库根据一个数组对两个数组进行排序(避免复制步骤)

如何使用extjs4.1在网格中按降序对带有连字符的浮点值进行排序

如何以编程方式根据排序标准对单元格重新排序 SWIFT 4

未捕获的类型错误:无法读取未定义的属性“internalId”(在扩展时对节点进行排序)

如何根据用户输入在 C# 中对对象数组进行排序?

ExtJS4 内存泄漏