Как сделать магазин с jsonreader, используя метаданные в Extjs 4?

Можно ли создать хранилище, которое будет читать json, и использовать в качестве модели поля, указанные в метаданных в json?

Я хочу сказать что-то вроде:

var store = new Ext.data.Store({
    autoLoad: {
        params: {
            metaNeeded: true
        }
    },
    reader: new Ext.data.JsonReader({fields:[]}),
    proxy: new Ext.data.HttpProxy({
        api: {
            url: 'php/chart-data.php'
        }
    })
});

Я пробовал несколько комбинаций, но я не могу заставить его работать. В настоящее время я получаю сообщение об ошибке «Невозможно вызвать метод indexOf неопределенного». У меня были и другие, включая «объект не имеет метода чтения».

Я отправляю json:

{
  metadata:{
    root:"rows",
    sortInfo:{
       field:"date",
       direction:"ASC"
    },
    fields:[ {
          name:"date"
       }, {
          name:"flow"
       },{
          name:"limit"
       }
    ],
    idProperty:"date"
  },
  success:true,
  rows: << snip >>
}

Можно ли сконфигурировать модель хранилища с помощью получаемых данных, чтобы я мог использовать тот же магазин позже с другими полями (например, датой, потоком, лимитом и температурой)?


person Matt L    schedule 01.06.2012    source источник


Ответы (1)


Я заставил его работать со следующим:

var store = new Ext.data.Store({
    proxy: {
        type: 'ajax',
        url: 'php/chart-data2.php',
        reader: new Ext.data.JsonReader({
            fields:[]
        })
    }
});

И php, который отправляет json:

'{"metaData":{
        "root":"rows",
        "fields": [
            {"name":"date",
             "type":"number", 
             "convert": function(val, rec) {
                return val*1000
            } },
            {"name":"flow"},
            {"name":"limit"}
        ]
    },
    "totalCount":'.count($chart).',
    "success":true,
    "rows":' . json_encode($chart) . '
}'

Теперь это позволяет серверу указывать данные (которые отображаются на диаграмме) и динамически добавлять их последовательно. Не знаю, хорошо ли, но работает. Я немного разочарован отсутствием документации по этому поводу.

person Matt L    schedule 01.06.2012