创建自定义json阅读器

时间:2011-12-08 21:55:30

标签: extjs4

我根据詹姆斯·克拉克在following post.

中的建议创建了自定义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]);
            }
        });

在商店定义中我帮助自定义阅读器

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;

结果未定义。

请帮忙

1 个答案:

答案 0 :(得分:4)

我最初尝试的代码问题是:

  1. read()方法应该返回一个值,所以应该说:
  2. return this.callParent([object]);
    
    1. 别名应为'reader.my-json'

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

    3. object.Results = Ext.Array.map(object.Results, Ext.decode);
      

      修复后,商店可以使用更简单的阅读器定义:

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

      但请查看完整代码中原始问题中的完整测试用例。我为没有彻底测试我最初提出的代码而道歉。