Доступ к вложенным объектам в фиде JSON - Sencha Touch - PullRequest
2 голосов
/ 27 апреля 2011

Начну с обычной оговорки: новичок в Sencha Touch / работа с JSON, барахтаться в темноте.Любая помощь или подталкивание в правильном направлении ценится больше, чем вы знаете!

Я пытаюсь заставить свое приложение получать данные из общедоступной ленты данных Google Spreadsheet JSON.Из того, что мне удалось выяснить, моя текущая модель основана на массивах JSON, а не на вложенных объектах.Как получить доступ и вернуть вложенный объект?

Ext.regModel('Count', {
    fields: [{name:'$t'}]

});

this.list = new Ext.List({
            itemTpl: new Ext.XTemplate('<div>{$t}</div>'),
            loadingText: false,
            store: new Ext.data.Store({
                model: 'Count',
                proxy: {
                    type: 'scripttag',
                     url :  'http://spreadsheets.google.com/feeds/cells/0AuYDRk91MX8-dHhkV29ZVkRGNjlvZjV4QVBIVmJubVE/odb/public/basic?range=A1&alt=json',
                    reader: {
                        type: 'json',
                        root: 'feed'
                    }
                }
            })
        });

Данные JSON (лишние материалы удалены, приведенная выше ссылка покажет все из них, если необходимо), содержит адрес электронной почты, который я предпочел бы не публиковать иindexed):

{
    "feed":{
        "entry":[{
            "content":{
                "type":"text",
                "$t":"11"
            }
        }]
    }
}

Если я добавлю другой канал JSON, который использует массивы, я могу работать с ним просто отлично, но просто не могу понять, что мне нужно сделать, чтобы получить доступ к этому целому числу в объекте, которыйсоответствует $ т.Если я помещаю «запись» в качестве корня вместо «подачи», я получаю сообщение об ошибке «Uncaught TypeError: Невозможно прочитать свойство« длина »из неопределенного».

1 Ответ

4 голосов
/ 27 апреля 2011

Решение!Оказывается, Сенче не понравилась переменная $ в моем шаблоне.

Ext.regModel('Count', {
    fields: [{name:'count', mapping:'content.$t'}]

});

this.list = new Ext.List({
            itemTpl: new Ext.XTemplate('<div>{count}</div>'),
            loadingText: false,
            store: new Ext.data.Store({
                model: 'Count',
                proxy: {
                    type: 'scripttag',
                     url :  'http://spreadsheets.google.com/feeds/cells/0AuYDRk91MX8-dHhkV29ZVkRGNjlvZjV4QVBIVmJubVE/odb/public/basic?range=A1&alt=json',
                    reader: {
                        type: 'json',
                        root: 'feed.entry'
                    }
                }
            })
        });
...