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

时间:2013-05-24 21:19:45

标签: javascript sorting datagrid dojo

我使用格式化程序在不同的值上或周围添加一些html(链接,中断和跨度)。现在的问题是列不排序。我认为这是因为列中的每个单元格都以相同的值开头(具有相同网址的链接。最终网址会有所不同)。

以下是数据:

            {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](第一个字段,&#39; main&#39;)?

1 个答案:

答案 0 :(得分:1)

我不知道它是否是Dojo中的错误,但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。结果可以找到here