1

2 つの MultiSelect リストがあります。右のリストから左のリストに値を移動した後、左のリストをソートできますか?

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

1 に答える 1

3

少なくとも直接的にはできません。これMultiSelectは、私が考える最も単純なウィジェットの 1 つであり、単なるラッパーです。つまり、特別な機能は含まれておらず、並べ替え機能が必要な場合は自分で作成する必要があります。

自分で作成する最良の方法は、ウィジェットを拡張することです。例:

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 に答える