2012-03-19 2 views
4

Я новичок в Ext, поэтому я заранее извиняюсь, если мой вопрос не достаточно ясно/слишком основной ...Сортировка по оказанной значения в ExtJS 3 EditorGridPanel

У меня есть Ext.grid.EditorGridPanel с Ext.data.Store и Ext.data.JsonReader.

У меня есть следующая проблема:

Я хотел бы сделать столбцы в моей сетке сортировкой, но возвращаемое значение из моего магазина не значение, которое я хотел бы сортировать (возвращаемое значение является идентификатором и я хотел бы сортировать по строкам, которые соответствуют этим идентификационным картам).

У меня есть функция рендеринга, которая преобразует этот идентификатор и строковое значение, но я не знаю, как его интегрировать в мой код.

Я нашел этот пост:

http://www.sencha.com/forum/showthread.php?45324-Grid-column-sorting-on-rendered-value

которая была похожа на мою потребность, но когда я попытался добавить:

{name: 'my_field', sortType: my_render_function} 

к моему JsonReader это не сработало.

Где я могу ошибаться?

Спасибо.


Для запроса Pater в:

var my_render = function(val, metaData, record, rowIndex, colIndex, store){ 
    if (val == null) 
     return ''; 
    var n = another_store.getById(val); 
    if (n == null) 
     return ''; 
    return n.data.name; 
}; 

var my_reader = new Ext.data.JsonReader({ 
    root: 'my_root', 
    id: 'tissue_num', 
    }, [{ 
    name: 'tissue_num', 
    type: 'int' 
    }, 'tissue_desc', 'organ'] 
); 

var my_store = new Ext.data.Store({ 
url: request_url, 
baseParams: { 
    _state: request_state, 
    _action: 'get_conditions' 
}, 
sortInfo: { 
    field: 'tissue_num', 
    direction: "ASC" 
}, 
reader: my_reader, 
pruneModifiedRecords: true 
}); 
+0

Не могли бы вы предоставить код? Функция сортировки и считыватель JSON? – pater

ответ

3

Поскольку вы хотите что-то больше, чем просто показать трансформацию, я не хотел бы использовать визуализатор здесь и вместо convert данных в определении записи.

val convertName = function(val, rec) { 
    // val will always be null since there's no field named 'name' 
    var id = rec.data.tissue_num; 
    if (id == null) 
     return ''; 
    var n = another_store.getById(id); 
    if (n == null) 
     return ''; 
    return n.data.name; 
}; 

var my_reader = new Ext.data.JsonReader({ 
    root: 'my_root', 
    id: 'tissue_num', 
    }, [{ 
    name: 'tissue_num', 
    type: 'int' 
    }, {name: 'name', convert: convertName}, 
    'tissue_desc', 'organ'] 
); 

Это даст вам запись с данными в name поле, которое вы можете сделать все, что вы хотите сделать с фактическими данными вы получили от сортировки сервера —, фильтрация, дисплей и т.д. проще, чем пытаться разузнать выставлять отображаемое значение каждый раз, когда вам это нужно.

+0

Отличное решение !!! Это сработало отлично! Использование конверта действительно то, чего мне не хватало. Благодарю вас, wes. –