1

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

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

1 回答 1

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 。

于 2013-07-17T12:24:51.537 回答