Как я создам модель из файла json? (ExtJS)

Это модель, которую я хочу создать с помощью файла json.

Ext.define('Users', {
    extend: 'Ext.data.Model',
    fields: [{name: 'user_id',  type: 'int'},
    {name: 'user_name',  type: 'string'}]
});

Что мне нужно сделать, чтобы автоматически создать эту модель на основе содержимого json-ответа с сервера?


person ilhan    schedule 13.06.2012    source источник
comment
Итак, вы хотите прочитать файл json с сервера и использовать его содержимое для создания определений полей и прочего?   -  person K..    schedule 13.06.2012


Ответы (3)


Чтобы модель создавалась автоматически, вам нужно включить поле metaData с вашими данными Json. metaData можно использовать для описания всех полей модели.

В документации ExtJS 4.1 — Ext. В data.reader.Json есть раздел под названием Response MetaData, в котором описывается основное использование этой функции.

person s_hewitt    schedule 13.06.2012

Вы должны иметь возможность вытащить некоторый json с полями и/или некоторым форматом, который можно довольно легко преобразовать в этот формат.

  1. Позвоните в службу, чтобы получить поля модели. Возможно, потребуется определить некоторую цепочку, которая сначала вызывает службу модели, а затем выполняет последующие шаги.

  2. Построить массив полей модели с полями, полученными из # 1. Возможно, потребуется преобразовать данные на основе ответа в #1.

    var fields = response.fields;

  3. Определить модель на основе полей в конструкторе Store

    var store = Ext.create('Ext.data.Store', {
        constructor: function () {
            var model = Ext.define("Users", {
                extend: "Ext.data.Model",
                fields: fields
            });
            this.model = model.$className;
            this.callParent(arguments);
        }
    });
    
person therat    schedule 13.06.2012
comment
Я пытаюсь создать модель из файла json, потому что не знаю содержимого данных, оно будет предоставлено с сервера. - person ilhan; 13.06.2012

Я использую только jsonp, который загружает файл json и анализирует его автоматически, не знаю, делает ли это Ext.Ajax.

Но вы бы сделали что-то вроде этого:

определение.json:

{
  "name": "User",
  "fields": [
    { "name": "user_id"  , "type": "int"    },
    { "name": "user_name", "type": "string" }
  ]
}

загрузить его:

Ext.Ajax.request({
  url    : "..../definition.json"
  success: function( res ) {
    Ext.define( res.name, {
      extend: 'Ext.data.Model',
      fields: res.fields
    }, function() {
      Ext.create( 'somestore', { model: res.name });
    });
  }
});
person K..    schedule 13.06.2012