0

我使用格式化程序在不同的值上或周围添加一些 html(链接、中断和跨度)。现在的问题是该列没有排序。我认为这是因为列中的每个单元格都以相同的值开头(具有相同 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')排序?

4

1 回答 1

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在商店中定义 a,例如:

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。结果可以在这里找到。

于 2013-05-26T14:46:50.677 回答