我有两个MultiSelect列表,在将任何值从右侧列表移动到左侧后,是否可以对左侧列表进行排序?
button= new Button({
label: "move left",
onClick: lang.hitch(this, function(){
dijit.byId(leftListId).addSelected(dijit.byId(rightListId));
})
答案 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。