EXTJS 5:如何在 EXT JS 5 中对网格列进行排序

2023-11-23

我最近将 EXT JS 的版本更新到 5,并且 doSort 函数的覆盖不再起作用。有人有想法怎么办?

覆盖示例:

{
    text: 'Custom',
    sortable : true,
    dataIndex: 'customsort',
    doSort: function(state) {
        var ds = this.up('grid').getStore();
        var field = this.getSortParam();
        ds.sort({
            property: field,
            direction: state,
            sorterFn: function(v1, v2){
                v1 = v1.get(field);
                v2 = v2.get(field);

                return v1.length > v2.length ? 1 : (v1.length < v2.length ? -1 : 0);
            }
        });
    }
}

Edit 1 :我只是尝试@tomgranerod 的解决方案,但 me.sortState 始终是“未定义”。 所以我这样做是为了更新我的变量:

    sort: function () {
        var me = this,
            grid = me.up('tablepanel'),
            store = grid.store;

        me.sortState = me.sortState === 'ASC' ? 'DESC' : 'ASC';

        Ext.suspendLayouts();
        me.sorting = true;
        store.sort({
            property: me.getSortParam(),
            direction: me.sortState,
            sortFn: function (v1, v2) {
                v1 = v1.get(field);
                v2 = v2.get(field);

                return v1.length > v2.length ? 1 : (v1.length < v2.length ? -1 : 0);
            }
        });
        delete me.sorting;
        Ext.resumeLayouts(true);
    }

但排序函数从未被调用。我不知道为什么。 ===>!!!它可以与 EXT JS 5.0.1 一起使用,但 ShortFin 函数始终不会被调用。 !!!

Edit 2 :这就是我试图拥有的:

ASC :

if (v1 and v2 are numbers) return v1 > v2;
else if (v1 is a number and v2 a string) return false;
else if (v1 is a string and v2 a number) return true;
else if (v1 and v2 are strings) return v1 > v2;

DESC :

if (v1 and v2 are numbers) return v1 < v2;
else if (v1 is a number and v2 a string) return true;
else if (v1 is a string and v2 a number) return false;
else if (v1 and v2 are strings) return v1 < v2;

您正在重写私有方法。因此,几乎可以预见它会在主要版本发布后崩溃。如果你看http://docs.sencha.com/extjs/5.0.0/apidocs/source/Column2.html#Ext-grid-column-Column你会发现没有doSort不再起作用了。

Ext的建议方法是使用sortType config可以采用一个函数将您的值转换为自然排序的东西,通常最简单的事情是将其转换为数字。因此,如果您想要稍微不同的东西,您可以修改我发布的代码来执行您想要的操作,而无需覆盖私有方法。

运行示例:https://fiddle.sencha.com/#fiddle/8km

var store = Ext.create('Ext.data.Store', {
    fields: [{
        name: 'ref',
        sortType: function(str)  {
            // Ext-JS requires that you return a naturally sortable value
            // not your typical comparator function.
            // The following code puts all valid integers in the range 
            // Number.MIN_SAFE_INTEGER and 0
            // And assumes the other values start with T and sorts 
            // them as positive integers               
            var parsed = parseInt(str, 10); 
            if ( isNaN( parsed ) ){
                return parseInt(str.substring(1), 10);
            } else {
                return Number.MIN_SAFE_INTEGER + parsed;
            }          
        }
    }],
    data: {
        'items': [
            {'ref': '1'},
            {'ref': '12'},
            {'ref': 'T0134'},
            {'ref': '121878'},
            {'ref': 'T0134343'},
            {'ref': 'T01POPI'},
            {'ref': '103'},
            {'ref': 'T01'}            
        ]
    },
    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            rootProperty: 'items'
        }
    }
});

Ext.create('Ext.grid.Panel', {
    title: 'Grid custom',
    store: store,
    columns: [{
        text: 'Reference',
        dataIndex: 'ref',
    }],
    height: 300,
    width: 400,
    renderTo: Ext.getBody()
});

如果您要重用此功能,请查看http://spin.atomicobject.com/2012/07/20/simple-natural-sorting-in-extjs/

/** Sort on string length  */
Ext.apply(Ext.data.SortTypes, {
    myCrazySorter: function (str) {
        // Same as above
    }
});

// And use it like
var store = Ext.create('Ext.data.Store', {
    fields: [{
        name: 'ref',
        sortType: 'myCrazySorter'
    }],
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EXTJS 5:如何在 EXT JS 5 中对网格列进行排序 的相关文章

随机推荐

  • 如何编辑外部 web.config 文件?

    我正在尝试编写一个 winform 应用程序 该应用程序能够编辑已安装的 Web 应用程序的 web config 文件 我已经通读了 ConfigurationManager 和 WebConfigurationManager 类方法 但
  • Python函数无法访问类变量

    我试图访问外部函数中的类变量 但是我收到 AttributeError 类没有属性 我的代码如下所示 class example def init self somevariable raw input Input something de
  • 从 MySQL 数据库读取 BLOB 图像

    我在从 MySQL 数据库读回 blob 时遇到一些问题 我已将其成功插入数据库 但似乎无法将其读回 我知道你们中的一些人可能会想 为什么他使用数据库来存储图像的 blob 而不仅仅是文件路径 文件名 但我希望具有灵活性 因为许多图像将存储
  • 从选择器 SwiftUI 中取消选择项目

    我使用带有选择器的表单 一切正常 我可以从选择器中选择一个元素 但我无法取消选择它 是否存在从选择器中取消选择项目的方法 谢谢你 Picker selection model countries label Text country For
  • 如何说服詹金斯共享多个作业的内部版本号?

    开发团队确实要求设置构建系统 因此每个构建都将为所有分支提供唯一的构建号 构建是由詹金斯使用每个分支的作业进行的 有一个 jenkins 插件可以为作业设置下一个版本号 但这有点无用 至少有两个原因 它将设置单个作业的内部版本号 您无法知道
  • 执行 SQL Server 脚本

    如何自动运行给定文件夹中的所有 SQL 脚本 编写 Windows 脚本 使用FOR构建循环遍历您的文件并使用SQLCMD执行每个文件的实用程序 for f in c MySQLScripts sql do sqlcmd i f
  • 在 Android 中从文件读取/写入字符串

    我想通过从 EditText 输入的文本将文件保存到内部存储 然后我希望同一个文件以字符串形式返回输入的文本并将其保存到另一个字符串以便稍后使用 这是代码 package com omm easybalancerecharge import
  • 在gradle中重命名apk

    我想从 gradle 重命名我的 apk 我在构建中有以下几行 applicationVariants all variant gt def file variant outputFile def filename file name re
  • shared_ptr会自动释放内存吗?

    我需要在这里使用shared ptr 因为我无法更改API Foo1 foo1 new Foo1 shared ptr
  • Linux,spidev:为什么它不应该直接在设备树中?

    我想定义一个具有用户模式访问权限的 SPI 设备 如中所述http linux sunxi org SPIdev 按照这些示例 我在设备树中添加了以下内容 ecspi1 other stuff mydev 0 compatible spid
  • 在Go中用小RAM读取大文件的最快方法[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想从不同的文本或JSON or CSV文件 我应该遵循哪种方法 我有博客文章文件读取 and 使用小 RAM 读取 2 GB 文本文件文件读取的不同方法 不同的方法 分块读取文
  • 将整数集转换为范围

    将一组整数转换为一组范围的最惯用的方法是什么 例如 给定集合 0 1 2 3 4 7 8 9 11 我想得到 0 4 7 9 11 11 假设我们正在转换std set
  • 如何在WPF中使用GDI+绘图?

    我想在我的 WPF 控件中使用 GDI 绘图 有多种方法可以做到这一点 最简单的方法是锁定使用 GDI 操作的位图 获取像素缓冲区 从锁定中获取的 BitmapData 中的 Scan0 IntPtr 复制内存 从你的像素缓冲区到Write
  • 如何在 bash 中传递完整的参数列表,同时将多字参数保存在一起?

    我在 bash 变量扩展中遇到一些分词问题 我希望能够将参数列表存储在变量中并运行它 但是任何引用的多字参数都不会按照我的预期进行评估 我将用一个例子来解释我的问题 假设我有一个函数decho将每个位置参数打印在它自己的行上 bin bas
  • 如何在 LaTeX 中发出参考文献的文本内容?

    我有一个部分 section Introduction label sec introduction 我想要一个指向该部分的链接 其中链接文本是该部分的名称 我可以用hyperref The hyperrf sec introduction
  • 为什么我不应该在 PHP 中使用 mysql_* 函数?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 不应该使用的技术原因是什么mysql 功能 例如 mysql query mysql connect or mysql rea
  • 如何在 C# 中使用正则表达式获取某个特定单词之前的数字?

    我们将使用下面的正则表达式来获取单词之前的数字 例子 838123 某个词 8 某个词 12 某个词 d s someWord 但有时数字和单词之间会出现任何内容 请参阅下面的示例行 Ex 43434 的 someword 12 任何 so
  • 如何检测 DataGridView 控件中的垂直滚动条

    在vs2008中使用winform 我有一个 DataGridView 我想检测垂直滚动条何时可见 我应该报名参加什么活动 我添加了网格最后一列中每个单元格值的求和 并在 DataGridView 底部的文本框中显示该值 我希望此文本框与单
  • 使用 Lua C API 迭代表中的表

    我正在尝试迭代 Lua 中的表并输出 每个表的键 每个表中每个条目的键 值对 这是代码 void print table lua State L lua pushnil L while lua next L 2 0 const char k
  • EXTJS 5:如何在 EXT JS 5 中对网格列进行排序

    我最近将 EXT JS 的版本更新到 5 并且 doSort 函数的覆盖不再起作用 有人有想法怎么办 覆盖示例 text Custom sortable true dataIndex customsort doSort function s