2013-07-17 2 views
1

У меня есть два списка MultiSelect, можно ли отсортировать список слева после перемещения любого значения из правого списка влево?как сортировать dojo/multiselect list

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

Виджеты из инструментария Dojo предоставляют множество обработчиков событий, чтобы пользователь мог переопределить. Проверьте http://dojotoolkit.org/api/, чтобы узнать, какие события вы можете обнаружить. – undefined

ответ

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.

+0

var domNodes = Array.prototype.slice.call (this.containerNode.children); показывает ожидаемую ошибку объекта jscript в IE, но отлично работает для Firefox ... любая помощь ??? – Maximus

Смежные вопросы