สร้างโปรแกรมอ่าน json ที่กำหนดเอง

ฉันสร้างโปรแกรมอ่าน json ที่กำหนดเองตามคำแนะนำของ James Clark ในโพสต์ต่อไปนี้

นี่คือโค้ดสำหรับสร้าง 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