2012-01-25 2 views
2

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

[{ "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 ', как я ожидал. Может ли кто-нибудь помочь мне понять магическое заклинание, чтобы получить datamodel и хранить, чтобы сделать это?

Спасибо!

+0

Кстати, у меня есть данные в переменной javascript. В настоящее время это document.jsonData, который, как я знаю, невелик, но я собирался исправить это позже. –

ответ

2

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

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/

+0

Спасибо! Ссылка на jsfiddle действительно полезна, и я, кажется, узнал, что все не так, как кажется с моим входящим json, потому что со статическими данными в том же формате он работает, но с входящими данными он не работает. некоторые скрытые символы или что-то вроде этого, запутывающее ExtJS. –

+1

Оказывается, что мне нужно было делать: «var my_data = JSON.parse (jsonString)», а затем передать переменную my_data в хранилище данных, а не передавать ее простым текстом. –

Смежные вопросы