2013-07-17 3 views
1

두 개의 MultiSelect 목록이 있습니다. 오른쪽 목록에서 왼쪽으로 값을 이동 한 후 왼쪽 목록을 정렬 할 수 있습니까?dojo/multiselect 목록을 정렬하는 방법

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() 함수를 사용하여 이러한 자식을 정렬 한 다음 모든 자식을 제거하고 정렬 된 자식을 추가합니다.

이제 이것을 사용하려면 addSelected()을 실행 한 직후에 dijit.byId(leftListId).sort()과 같은 것을 할 수 있습니다.

예제 JSFiddle은 here입니다.

+0

var domNodes = Array.prototype.slice.call (this.containerNode.children); IE에서 jscript 개체의 예상 오류가 표시되지만 Firefox에서 완벽하게 작동합니다 ... 어떤 도움 ??? – Maximus

관련 문제