Sencha Touch: как получить данные из сложных объектов JSON - PullRequest
3 голосов
/ 23 ноября 2011

Я не могу получить записи из сложных объектов JSON, но я могу получить данные при использовании TPL.

Пожалуйста, смотрите приведенные ниже примеры кодов:

JSON:

{
"lists": [
    {
        "title": "Groceries",
        "id": "1",
        "items": [
            {
                "text": "contact solution - COUPON",
                "listId": "1",
                "id": "4",
                "leaf": "true" 
            },
            {
                "text": "Falafel (bulk)",
                "listId": "1",
                "id": "161",
                "leaf": "true" 
            },
            {
                "text": "brita filters",
                "listId": "1",
                "id": "166",
                "leaf": "false" 
            }
        ] 
    } 
]

Модель:

Ext.regModel("TopModel", 
{
    fields: [
        { name: 'title', type: 'string' },
        { name: 'id', type: 'string' },
    ],
    hasMany: [
        { model: 'SubModel', name: 'items' }
    ],
    proxy: {
    type: 'ajax',
    url : 'test/lists.json',
        actionMethods: {
            create: 'POST',
            destroy: 'POST',
            read: 'POST',
            update: 'POST'
    },
    reader: {
        type: 'json',
        root: function(data) {
                    return data.lists || [];
                }
    }
   }
});

Ext.regModel("SubModel", 
{
    fields: [
            { name: 'text', type: 'string'},
        { name: 'listId', type: 'string'},
        { name: 'id', type: 'string'},
        { name: 'leaf', type: 'string'}
    ]
});

В моем файле View я определил хранилище, как показано ниже.

this.stores = new Ext.data.Store({
            clearOnPageLoad: false,
        autoLoad:true,
            model:'TopModel',
        getGroupString: function(record) {
        return record.get('leaf');
            }
});
});

Я не могу получить значения для record.get ('leaf') , поскольку это относится к элементам дочерней модели. Когда я пытался распечатать его, он печатается как неопределенный.

Как получить доступ к дочерним атрибутам? Здесь 'items' указан как массив.

Я попытался отобразить данные, используя список, как показано ниже. Отображаются все записи, но проблема в том, что они выбираются как один элемент целиком, а не как отдельный список для каждого элемента.

var list = new Ext.List({
    cls: 'big-list',
    grouped : true,
    emptyText: '<div>No data found</div>',
    itemTpl: ['<div><tpl for="items">',
        '<div>',
        '{id} {text}',
        '</div>',
        '</tpl></div>',
        ],
    store: this.stores,
    listeners: {
        itemtap: this.onListItemTap,
        scope: this
    }
});

Пожалуйста, помогите мне, как получить элементы списка для отображения в виде отдельных записей.

1 Ответ

4 голосов
/ 07 января 2014

вы можете использовать онлайн-анализатор json (http://json.parser.online.fr/) для анализа json xml из данных синтаксического анализатора, вы легко разделяете объекты и массивы и получаете все данные, которые требуются для вас ... надеюсь, это поможет вам

...