是的,开发部开发机器不能上网,我才想到这方法。万分感谢!
{"rows":[{"name":"开发部","id":"1000001","number":"11"}, {"name":"市场部","id":"1000002","number":"22"}]}, totalCount:2,money:3000}
上面是一个后台返回的grid分页json格式数据,
那么我们怎么获得"money"这个键对应的值呢?(注意:只调一次后台,而且grid是分页的)。
按平时的情况,store设置了root:'rows'属性后,我们通过操作store也只能获得rows:[]里面的数据。
去看ext里面的源码发现Ext.data.JsonReader(这里使用的是Ext.data.JsonReader)是通过read方法获取后台返回的数据信息的:
read : function(response){ var json = response.responseText; var o = Ext.decode(json); if(!o) { throw {message: 'JsonReader.read: Json object not found'}; } return this.readRecords(o); }
没有错我们看到了response,既然这样我们只要在这里作修改便可!
重写Ext.data.JsonReader的read方法,为Reader增加一个responseText属性:
Mic.JsonReader = Ext.extend(Ext.data.JsonReader, { read : function(response){ var json = response.responseText; var o = Ext.decode(json); this.responseText = json; if(!o) { throw {message: 'JsonReader.read: Json object not found'}; } return this.readRecords(o); } });
把我们定义的store里面的
reader : Ext.data.JsonReader({属性代码省略......}),
换成
reader : Mic.JsonReader({......}),
就可以通过store获得后台返回的所有信息!
上面为例子定义一个store:
var ds = new Ext.data.Store({
//其他代码省略...............
//....................
reader : Mic.JsonReader({......})
});
获得方法:
var o = Ext.decode(ds.reader.responseText);
var money = o.money;
这样就实现了。