Dojo数据网格:按单元格布局中的第一个值排序

Dojo datagrid: sort by first value in cell layout

本文关键字:第一个 排序 布局 单元格 数据网 数据 网格 Dojo      更新时间:2023-09-26

我使用格式化器在不同的值上或周围添加一些html(链接,break和span)。现在的问题是该列没有排序。我认为这是因为列中的每个单元格都以相同的值开始(具有相同url的链接)。最终url将会不同)。

数据如下:

            {id: 1, 'main': 'puma', 'description': 'A puma is a cat', 'url': 'http://www.google.com', 'filesize': '12.34', date: '2010-01-01'},
            {id: 2, 'main': 'tiger', 'description': 'Tiger, another cat', 'url': 'http://www.google.com', 'filesize': '43.27', date: '2013-03-04'},
            {id: 3, 'main': 'Wombat', 'description': 'wombat, not a cat', 'url': 'http://www.google.com', 'filesize': '59.01', date: '2011-03-08'}

这是用于布局的(省略了本示例中的其他列):

{name: 'Title', fields: ['main','description','url','filesize'], 'width': '200px',formatter: formatLink}

这是格式化器:

function formatLink(value){
    return '<a href="'+ value[2] +'">'+value[0]+'</a><br />'+value[1]+'<span class="smalltxt">&nbsp;File Size:&nbsp;' + value[3] + 'MB</span>';
}

为清楚起见,查看所有操作:http://jsfiddle.net/QXYDK/6/

理想情况下,我不会在同一个单元格中拥有所有这些东西,但它需要这个项目。

中心列目前根本不排序。是否有一种方法可以选择按值[0]排序(第一个字段,'main')?

我不知道这是否是Dojo中的一个bug,但是Dojo只定义了对field属性的排序。但是因为您使用的是带有formatter的自定义字段,所以您只使用fields而不使用field

解决方案是定义您想要排序的field(在本例中为"main")。

你的布局代码将变成:

var layout = [
    {name: 'Index', field: 'id'},
    {name: 'Title', fields: ['main','description','url','filesize'],field: 'main', 'width': '200px',formatter: formatLink},
    {name: 'Date', field: 'date', width: 10, formatter: formatDate}
];

默认情况下,Dojo对数据进行大小写敏感排序,这意味着Wombat(以大写字母开头)的排序将不同于puma和tiger(以小写字母开头)。要启用不区分大小写的排序,需要在存储中定义comparatorMap,例如:

store.comparatorMap = new Object();
store.comparatorMap["main"] = function(a, b) {
    if (a.toLowerCase() < b.toLowerCase()) {
         return -1;   
    } else if (a.toLowerCase() == b.toLowerCase()) {
        return 0;
    } else {
        return 1;
    }
};

我也用这个新信息更新了你的JSFiddle。