Проблемы с загрузкой данных JSON в хранилище данных ExtJS - PullRequest
2 голосов
/ 25 января 2012

Я пробовал каждую комбинацию, которую могу придумать, с точки зрения того, как настроить хранилище данных ExtJS для чтения моих входящих данных JSON. Я получаю эти данные в формате JSON:

[{ "data_type": {"attribute1" : "value1",
                  "attribute2" : "value2",
                  "attribute3" : "value3" 
                  }
 },
 { "data_type": {"attribute1": "value4",
                  "attribute2" : "value5",
                  "attribute3" : "value6" 
                  }
 }
]

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

    Ext.create('Ext.container.Container', 
    {
        id: 'junk',
        renderTo: 'slider',
        width: 960,
        height:600,
        layout: 'vbox',
        items: [
           {
              xtype: 'grid',
              title: 'foobar',
              height: 400,
              width: 700,
              store: my_store,
              viewConfig: { emptyText: 'No data' },
              columns: [
                  {
                     text: 'column1',
                     dataIndex: 'attribute1'
                  },{
                     text: 'column2',
                     dataIndex: 'attribute2'
                  },{
                     text: 'column3',
                     dataIndex: 'attribute3'
                  }
              ]
           }
        ]
    }

Я знаю, что ExtJS знает, как анализировать этот JSON, потому что я могу сделать:

var foo = Ext.decode(data);
var good_data = foo[0].data_type.attribute1

И это возвращает 'value1', как я и ожидал. Может ли кто-нибудь помочь мне понять магическое заклинание, чтобы получить модель данных и магазин для этого?

Спасибо!

1 Ответ

2 голосов
/ 25 января 2012

Прежде всего вы должны создать модель:

Ext.define('SomeModel', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'attribute1'},
        {name: 'attribute2'},
        {name: 'attribute3'}
    ]
});

Затем вы можете настроить хранилище для поддержки вашего формата данных, установив для свойства record значение data_type:

var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    data : data,
    model: 'SomeModel',
    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            record: 'data_type'
        }
    }
});

Рабочий образец: http://jsfiddle.net/lolo/WfXK6/1/

...