Создать пользовательскую программу чтения json

Я создал пользовательскую программу чтения 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;

результат не определен.

Пожалуйста помоги


person Gregory Nozik    schedule 08.12.2011    source источник
comment
См. изменения в моем ответе в исходном вопросе. В моем исходном коде были некоторые ошибки.   -  person James Clark    schedule 09.12.2011


Ответы (1)


Проблемы с кодом в моей первой попытке были:

  1. метод read() должен возвращать значение, поэтому он должен сказать:
return this.callParent([object]);
  1. Псевдоним должен был быть 'reader.my-json'

  2. Результаты нужно было сопоставить, потому что это был массив:

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

Если они исправлены, магазин может использовать более простое определение читателя:

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

Но полный код см. в исходном вопросе. Приношу извинения за то, что не провел тщательную проверку кода, который я первоначально предложил.

person James Clark    schedule 08.12.2011
comment
Я не могу использовать модель . Код не работает, у меня не работает функция карты - person Gregory Nozik; 09.12.2011
comment
читать: функция (объект) { отладчик; //object.Results = Ext.decode(object.responseText); object.Results = Ext.Array.map(object.Results, Ext.decode); вернуть this.callParent([объект]); //возврат объекта.Результаты; } - person Gregory Nozik; 09.12.2011
comment
Извините но нет. Возможно, вы хотите опубликовать свой вопрос в StackOverflow? - person James Clark; 15.12.2011