Buat pembaca json khusus

Saya membuat pembaca json khusus seperti yang disarankan oleh James Clark di postingan berikut.

Berikut adalah kode untuk membuat json khusus

  Ext.define('MyReader', {
            extend: 'Ext.data.reader.Json',
            alias: 'my-json',
            read: function (object) {
                debugger;
                object.Results = Ext.decode(object.responseText);
                this.callParent([object]);
            }
        });

Dalam definisi toko saya menetapkan pembaca khusus

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 yang saya terima dari klien terlihat seperti ini

{"Results":["{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}"],"Total":4}

Saya menerima kesalahan di ext-js.js. Saya men-debugnya dan kesalahan terjadi di kelas Ext.data.proxy.Server dalam kode berikut

if (success === true) {
        reader = me.getReader();
        result = reader.read(me.extractResponseData(response));
        records = result.records;

hasilnya tidak ditentukan.

Tolong bantu


person Gregory Nozik    schedule 08.12.2011    source sumber
comment
Lihat hasil edit jawaban saya di pertanyaan awal. Ada beberapa bug di kode awal saya.   -  person James Clark    schedule 09.12.2011


Jawaban (1)


Masalah dengan kode pada upaya awal saya adalah:

  1. metode read() harus mengembalikan nilai, jadi seharusnya tertulis:
return this.callParent([object]);
  1. Aliasnya seharusnya 'reader.my-json'

  2. Hasilnya perlu dipetakan karena berupa array:

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

Setelah masalah tersebut diperbaiki, toko dapat menggunakan definisi pembaca yang lebih sederhana:

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

Tapi lihat test case lengkap di pertanyaan awal untuk kode lengkapnya. Saya minta maaf karena belum menguji secara menyeluruh kode yang saya usulkan pada awalnya.

person James Clark    schedule 08.12.2011
comment
Saya tidak bisa menggunakan model. Kode tidak berfungsi. Saya gagal pada fungsi peta - person Gregory Nozik; 09.12.2011
comment
baca: fungsi (objek) { debugger; //objek.Hasil = Ext.decode(objek.responseText); objek.Hasil = Ext.Array.map(objek.Hasil, Ext.decode); kembalikan ini.callParent([objek]); //mengembalikan objek.Hasil; } - person Gregory Nozik; 09.12.2011
comment
Maaf tidak. Mungkin Anda ingin memposting pertanyaan Anda ke StackOverflow? - person James Clark; 15.12.2011