3

这是我想使用 json 文件创建的模型

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

根据来自服务器的 json 响应的内容,我需要做什么才能自动创建此模型?

4

3 回答 3

4

为了自动创建模型,您需要在metaDataJson 数据中包含该字段。metaData可用于描述模型的所有字段。

在 ExtJS 4.1 文档中 - Ext.data.reader.Json有一个名为 Response MetaData 的部分描述了此功能的基本使用。

于 2012-06-13T14:40:22.320 回答
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);
        }
    });
    
于 2012-06-13T14:13:50.247 回答
2

我只使用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 });
    });
  }
});
于 2012-06-13T14:29:25.270 回答