代码之家  ›  专栏  ›  技术社区  ›  Dmitry

Ext JS排序(2、5、30、100)比较函数

  •  0
  • Dmitry  · 技术社区  · 8 年前

    使用ExtJS 4.2.3。我有一个按字符串排序的值列表,它看起来像:

       DATA1 (NOW)  | DATA1 (SHOULD BE) |  
      -----------------------------------
           100      |         2         |  
           2        |         5         | 
           30       |         30        | 
           5        |         100       |
    

    ExtJS上的代码示例:

     DATA1_store = new Ext.data.TreeStore({
                    model: DATA1.id,
                    proxy: {
                        url: proxyCfg.url,
                        type: proxyCfg.type,
                        reader: {
                            type: "json",
                            root: "data"
                        }
                    },
                    remoteSort: true,
                    sorters: [{
                        property: "data1",
                        direction: "ASC"
                    }],
    

    这里应该可以比较javascript上的函数:

    points.sort(function(a, b){return a - b})
    

    对于ext JS上面的代码部分,以另一种方式寻求有关比较函数或mb的帮助。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Sergey Novikov    8 年前

    你所要做的就是指定 Ext.data.Field.type 属于 data1 模型中的字段( 'int' 就你而言, 'string' 默认情况下使用),如下所示:

    fields: [{
        name: 'data1',
        type: 'int'
    }]
    

    这是 simple fiddle 举例说明。

    此外,您可以检查 Ext.data.Field.sortType .

    更新

    如果你必须比较像“1.1.2”和“1.5”这样的值,我认为你可以使用 外部数据。领域排序类型 ,例如(我不知道确切的数据格式,因此举个例子,我假设点后的每个部分都等于0到99之间的数字,并且部分的数量未知):

    sortType: function (value) {
        var parts = value.split('.'),
            comparableValue = 0;
        for (var i = 0; i < parts.length; ++i) {
            comparableValue += parts[i] * Math.pow(10, i * -2);
        }
        return comparableValue;
    }
    

    这是 simple fiddle 举例说明。