【问题标题】:Dojo datagrid: sort by first value in cell layoutDojo datagrid:按单元格布局中的第一个值排序
【发布时间】:2013-05-20 13:50:24
【问题描述】:

我使用格式化程序在不同的值上或周围添加一些 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/

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

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

【问题讨论】:

    标签: javascript sorting datagrid dojo


    【解决方案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找到。

    【讨论】:

    • 谢谢,完美运行。我永远不会意识到它只与field
    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 2012-01-20
    • 2011-11-10
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多