请教两问题:JsonReader里name 如果含有点(“.”),该怎么处理? + combo里面怎样加入空行

aeyond 2008-12-18 05:21:19
两个问题:
1. JsonReader里面有如下形式:
{ name : 'worker.name', type : 'string' }

即便后台json返回 "worker.name":"aaa",页面也无法显示结果(ColumnModel里面相应的id和dataIndex都设置成 worker.name

有一个办法是后台把json里面的worker.name替换成worker_name
前台也全部用 worker_name,这样显示是正常的

但是点表头排序时又会按照worker_name这个字段来排序,于是直接出错
我只好在后台再把它替换成worker.name方能正常查询

觉得这样转来转去实在太麻烦,各位兄弟姐妹们有啥好的解决方案不?

2. 想在combo里面加入一空行,
data : [['', ''], ['0', '否'], ['1', '是']],
fields : ['text', 'value']
结果空行有了,不过空的高度和正常的高度差了很多,怎样加入一个空行勒?
...全文
76 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aeyond 2008-12-29
感谢楼上的兄弟,第一个ok

Combo里面加入空行问题有兄弟们遇到过么?
回复
peacock 2008-12-19
第一个问题用.toString()试试
第二个问题好像在FF才会出现这样的现象
回复
triace_zhang 2008-12-19
上面少了个}

Ext.data.JsonReader.prototype.getJsonAccessor = function(){
var re = /[\[\.]/;
return function(expr) {
try {
return(!re.test(expr))
? new Function("obj", "return obj." + expr)
: function(obj){
return obj[expr];
};
} catch(e){}
return Ext.emptyFn;
};
}();
}
回复
triace_zhang 2008-12-19
蛮有意思的问题,我挖了下了下源码,Extjs 2.0版的JsonReader的getJsonAccessor 函数有bug
修正如下
服务端数据里要加入转义符,比如java里面:
String json = "{images: [{'name\\.name': 'Image one', url:'/GetImage.php?id=1', size:46.5, lastmod: new Date(2007, 10, 29)},{'name\\.name': 'Image Two', url:'/GetImage.php?id=2', size:43.2, lastmod: new Date(2007, 10, 30)}]}";

那么前台的cm和record
var store = new Ext.data.JsonStore({
url: 'depart.jsp',
root: 'images',
fields: ['name.name', 'url', {name:'size', type: 'float'}, {name:'lastmod', type:'date'}]
});

columns: [
{id:'name',header: "Name", width: 80, sortable: true, dataIndex: 'name.name'},
{header: "Url", width: 175, sortable: true, dataIndex: 'url'},
{header: "Size", width: 75, sortable: true, dataIndex: 'size'},
{header: "Last Updated", width: 85, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastmod'}
],

最重要的是在Ext.onReady开始,即生成store和cm前面覆盖JsonReader原始的getJsonAccessor 函数
if ( typeof Ext.data.JsonReader.prototype.getJsonAccessor == 'function'){
Ext.data.JsonReader.prototype.getJsonAccessor = function(){
var re = /[\[\.]/;
return function(expr) {
try {
return(!re.test(expr))
? new Function("obj", "return obj." + expr)
: function(obj){
return obj[expr];
};
} catch(e){}
return Ext.emptyFn;
};
}();

我只看了2.0的代码,不知道2.2里有没有修正。如果修正了的话就直接用2.2
回复
aeyond 2008-12-19
[Quote=引用 1 楼 peacock 的回复:]
第一个问题用.toString()试试
第二个问题好像在FF才会出现这样的现象
[/Quote]

toString()?
怎么处理呢?楼上兄弟能说的清楚点么?

第二个问题FF和IE6下都显示不正常的
回复
发动态
发帖子
Ajax
创建于2007-09-28

5.2w+

社区成员

Web 开发 Ajax
申请成为版主
社区公告
暂无公告