2012-05-04 50 views
7

Tôi đang sử dụng khung công tác ExtJs 4.1. Tôi có một lưới chỉ hiển thị một cột (Tên). Lưới được liên kết với một cửa hàng có hai trường (Tên và SortOrder). Trường "tên" trong cửa hàng được liên kết với cột Tên của lưới. Tôi muốn sắp xếp cột tên dựa trên giá trị có sẵn trong trường SortOrder trong cửa hàng. Làm thế nào tôi có thể thực hiện logic như vậy.Sắp xếp một cột dựa trên một cột khác trong lưới ExtJs 4.1

Cảm ơn bạn

Trả lời

4

Bạn có nghĩa là một cái gì đó như thế này:

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

Cảm ơn .... tự hỏi tại sao họ không đặt "doSort" đó vào tài liệu của Ext.grid.column.Column. +1 cho bạn – T1000

+1

Hãy lưu ý, Ext.grid.column.Column.doSort() là một phương pháp riêng được sử dụng để xử lý nội bộ và do đó thường không được khuyến nghị sử dụng bởi chúng tôi. Bởi vì điều này, trong tài liệu nó không hiển thị, trừ khi bạn tìm kiếm nó một cách cụ thể hoặc cho phép xem các chức năng riêng tư. – Yetti

19

Ngoài ra còn có giải pháp một chút đơn giản hơn:

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

Vì vậy, thay vì trọng doSort(), bạn có thể chỉ ghi đè phương thức getSortParam() (được sử dụng bởi doSort()).

+0

Xác nhận rằng điều này làm việc với 4.2.3 – Dave

+0

Điều này đáng lẽ phải là câu trả lời được chấp nhận. – bits

+0

Điều này giải quyết vấn đề này cho tôi, nhưng trường tham chiếu khác của bạn ('SortOrder' trong trường hợp này) có cột riêng của nó, bạn có thể cần cung cấp cho nó một chỉ mục dữ liệu khác và ghi đè hàm' getSortParam' của nó. Không thực sự chắc chắn tại sao mặc dù ... – Sash

0

Một cách khác để thực hiện điều đó khi nhấp vào Tiêu đề.

columns: [ 
    { 
     header: 'Name', 
     dataIndex: 'Name', 
     listeners: { 
      headerclick: function() { 
       var store = this.up('grid').getStore(); 
       store.sort({ 
         property: 'SortOrder', 
         direction: this.sortState 
        }); 
      } 
     } 
    } 
] 
Các vấn đề liên quan