如何排序dojo / multlectlect列表

时间:2013-07-17 10:14:14

标签: javascript dojo

我有两个MultiSelect列表,在将任何值从右侧列表移动到左侧后,是否可以对左侧列表进行排序?

button= new Button({
    label: "move left",
    onClick: lang.hitch(this, function(){
    dijit.byId(leftListId).addSelected(dijit.byId(rightListId));
})

1 个答案:

答案 0 :(得分:3)

你不能,至少不能直接。 MultiSelect是我认为最简单的小部件之一,只是一个包装器。 这意味着没有包含特殊功能,如果您想要排序功能,您必须自己制作一个。

自己创建一个的最好方法是扩展小部件。一个例子:

declare("dijit/form/MultiSelect", [MultiSelect], {
    sort: function() {
        var domNodes = Array.prototype.slice.call(this.containerNode.children);
        domNodes.sort(function(a, b) {
            if (a.innerHTML < b.innerHTML) {
                return -1;
            } else if (a.innerHTML == b.innerHTML) {
                 return 0;   
            } else {
                return 1;
            }
        });
        this.containerNode.innerHTML = "";
        array.forEach(domNodes, function(node) {
           this.containerNode.appendChild(node); 
        }, this);
    }
});

这样做很容易。我们添加一个名为sort()的函数,然后我们只检索所有子项的列表,使用数组的sort()函数对这些子项进行排序,然后删除所有子项并添加已排序的子项。

要使用它,您现在可以在执行dijit.byId(leftListId).sort()后立即执行以下操作:addSelected()

可以找到一个示例JSFiddle here