2012-05-04 23 views
7

Estoy utilizando el marco ExtJs 4.1. Tengo una grilla que muestra solo una columna (Nombre). La grilla está asociada a una tienda que tiene dos campos (Nombre y SortOrder). El campo "nombre" en la tienda está asociado con la columna Nombre de la cuadrícula. Quiero ordenar la columna de nombre según el valor disponible en el campo SortOrder en la tienda. ¿Cómo puedo implementar tal lógica?Ordenando una columna basada en otra columna en la cuadrícula ExtJs 4.1

Gracias

Respuesta

4

¿Quiere decir algo como esto:

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

Gracias ... me pregunto por qué no pusieron ese "doSort" en la documentación de Ext.grid.column.Column. +1 para usted – T1000

+1

Tenga en cuenta que Ext.grid.column.Column.doSort() es un método privado que se utiliza para el procesamiento interno y, como tal, generalmente no se recomienda su uso. Debido a esto, en la documentación no es visible, a menos que lo busque específicamente o habilite la visualización de funciones privadas. – Yetti

19

También hay solución un poco más simple:

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

Así que en lugar de anular doSort() puede simplemente anulación Método getSortParam() (que es utilizado por doSort()).

+0

Confirmado que esto funciona con 4.2.3 – Dave

+0

Esta debería haber sido la respuesta aceptada. – bits

+0

Esto también me solucionó este problema, pero el otro campo al que se hace referencia ('SortOrder' en este caso) tiene su propia columna, puede que necesite darle un índice de datos diferente y anular su función 'getSortParam' también. No estoy seguro de por qué ... – Sash

0

Otra forma de hacerlo en el Encabezado haga clic.

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