2012-05-04 3 views
7

ExtJs 4.1 프레임 워크를 사용하고 있습니다. 하나의 열 (이름) 만 표시하는 표가 있습니다. 격자는 두 개의 필드 (Name 및 SortOrder)가있는 저장소와 연관됩니다. 상점의 "name"필드는 격자의 이름 열과 연관됩니다. 저장소의 SortOrder 필드에서 사용할 수있는 값을 기반으로 이름 열을 정렬하려고합니다. 그러한 논리를 어떻게 구현할 수 있습니까?ExtJs 4.1 그리드의 다른 열을 기반으로 한 열 정렬

감사합니다

답변

4

이 같은 의미합니까 :

... 
columns: [{ 
    header: 'Name', 
    dataIndex: 'Name', 
    sortable: true, 
    doSort: function(state){ 
     var ds = this.up('tablepanel').store; 
     ds.sort({ 
      property: 'SortOrder', 
      direction: state 
     }); 
    } 
    ....  
}] 
+0

감사합니다 .... 왜 "doSort"를 Ext.grid.column.Column의 설명서에 넣지 않았는지 궁금합니다. +1 – T1000

+1

Ext.grid.column.Column.doSort()는 내부 처리에 사용되는 개인용 메서드이므로 일반적으로 사용하지 않는 것이 좋습니다. 따라서 문서를 구체적으로 검색하거나 비공개 기능을 볼 수있는 경우가 아니면 문서가 표시되지 않습니다. – Yetti

19

또한 약간의 간단한 해결책이있다 :

 
... 
columns: [{ 
    header: 'Name', 
    dataIndex: 'Name', 
    sortable: true, 
    getSortParam: function() { 
     return 'SortOrder'; 
    } 
... 
}] 
... 

그래서 그 대신 doSort을 (재정의) 그냥 덮어 쓸 수를 getSortParam() 메소드 (doSort()가 사용함).

+0

4.2.3에서 작동 함을 확인했습니다. – Dave

+0

이것은 허용 된 답변 일 것입니다. – bits

+0

이것은 나에게도이 문제를 해결했지만 다른 참조 필드 (이 경우'SortOrder')는 자체 열을 가지고 있으므로 다른 데이터 색인을주고 getSortParam 함수를 재정의해야 할 수도 있습니다. 정말 확실한 이유는 아니지만 ... – Sash

0

헤더를 클릭 할 때 또 다른 방법이 있습니다.

columns: [ 
    { 
     header: 'Name', 
     dataIndex: 'Name', 
     listeners: { 
      headerclick: function() { 
       var store = this.up('grid').getStore(); 
       store.sort({ 
         property: 'SortOrder', 
         direction: this.sortState 
        }); 
      } 
     } 
    } 
] 
관련 문제