Extjs4 创建自定义json读取器

Extjs4 创建自定义json读取器,extjs4,Extjs4,我按照James Clark在年的建议创建了自定义json阅读器 下面是创建自定义json的代码 Ext.define('MyReader', { extend: 'Ext.data.reader.Json', alias: 'my-json', read: function (object) { debugger; object.Results = Ext

我按照James Clark在年的建议创建了自定义json阅读器

下面是创建自定义json的代码

  Ext.define('MyReader', {
            extend: 'Ext.data.reader.Json',
            alias: 'my-json',
            read: function (object) {
                debugger;
                object.Results = Ext.decode(object.responseText);
                this.callParent([object]);
            }
        });
店内定义I assing自定义读取器

var store = Ext.create('Ext.data.Store', {
//model: 'Option',
    fields: fields,
    pageSize: itemsPerPage,
    proxy: {
        type: 'ajax',
        url: getDataWithPageURL,
        **reader:Ext.create('MyReader', {root: 'Results', totalProperty: 'Total'})**
    }
});
我从客户端接收的json如下所示

{"Results":["{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}"],"Total":4}
我在ext-js.js中收到一个错误 我调试了它,错误发生在中的Ext.data.proxy.Server类中 以下代码

if (success === true) {
        reader = me.getReader();
        result = reader.read(me.extractResponseData(response));
        records = result.records;
结果未定义。


请帮助

我最初尝试时遇到的代码问题有:

  • read()方法应该返回一个值,因此应该是:
  • 别名应该是“reader.my json”

  • 需要映射结果,因为它是一个数组:

  • 有了这些修复,存储可以使用更简单的读卡器定义:

    reader: {
      type: 'my-json',
      root: 'Results',
      totalProperty: 'Total'
    }
    

    但是完整的代码请参见原始问题中的完整测试用例。我很抱歉没有彻底测试我最初提出的代码。

    请参阅原始问题中对我答案的编辑。我的初始代码中有一些错误。我无法使用模型。代码不起作用,映射函数读取失败:函数(对象){debugger;//object.Results=Ext.decode(object.responseText);object.Results=Ext.Array.map(object.Results,Ext.decode);返回此.callParent([object]);//return object.Results;}抱歉,没有。也许您想将问题发布到StackOverflow?
    object.Results = Ext.Array.map(object.Results, Ext.decode);
    
    reader: {
      type: 'my-json',
      root: 'Results',
      totalProperty: 'Total'
    }