通过重写reader对象的read方法,使得Ext.data.Store可以获取后台返回的responseText

是的,开发部开发机器不能上网,我才想到这方法。万分感谢!

 

 

{"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;

这样就实现了。

 

你可能感兴趣的:(json,ext)