2012-03-19 65 views
4

排序我是新来的内线,所以我提前道歉,如果我的问题是不够清晰/太基本...由呈现值一个ExtJS 3 EditorGridPanel

我有一个Ext.grid.EditorGridPanel与Ext.data.Store和一个Ext.data.JsonReader。

我有以下问题:

我想对我做网格列排序,但是从我的店里返回的值是不是我想作为排序依据的值(返回的值是一个ID我想按照这个ID映射到的字符串排序)。

我有一个渲染函数,可以在这个ID和字符串值之间进行转换,但我不知道如何将它集成到我的代码中。

我发现这个帖子:

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

这看起来类似于我的需要,但是当我尝试添加:

{name: 'my_field', sortType: my_render_function} 

我JsonReader没有奏效。

我在哪里弄错了?

谢谢。


对于佩特的要求:

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 2012-03-19 15:43:03

回答

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

优秀的解决方案!这工作完美!转换器的使用确实是我缺乏的。谢谢,韦斯。 – 2012-03-20 08:14:03