2012-06-13 2 views
3

Это модель, которую я хочу создать с помощью JSON файлКак я смогу создать модель из json-файла? (ExtJS)

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

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

+0

так что вы хотите прочитать json-файл с сервера и использовать его содержимое для создания определений полей и т. Д.? –

+0

@ da_b0uncer, да. – ilhan

ответ

4

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

В документации ExtJS 4.1 - Ext.data.reader.Json имеет раздел «Ответные метаданные», который описывает базовое использование этой функции.

3

Вы можете с легкостью вытащить некоторые 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); 
        } 
    }); 
    
+0

Я пытаюсь создать модель из json-файла, потому что я не знаю содержимого данных, оно будет дано с сервера. – ilhan

+0

О, хорошо. Я отредактирую оригинальный ответ. – therat

2

я использую только JSONP, который загружает файл в формате JSON и анализирует его автоматически, не знаю, если Ext Аякс тоже это делает.

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

definition.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 }); 
    }); 
    } 
}); 
Смежные вопросы