Extjs 使用 json store 创建表单项

Extjs create form items with json store

我已经创建了一个表单面板视图,我将在这个面板旁边创建一些表单项。与商店、控制器和模型的通信工作正常,但我如何在视图中创建项目?

Json 数组(从外部服务检索):

{
"data": [
    {
        "name": "ff",
        "xtype": "textfield",
        "allowBlank": false,
        "fieldLabel": "labelText1"
    },
    {
        "name": "fsdsdf",
        "xtype": "textfield",
        "allowBlank": false,
        "fieldLabel": "labelText2"
    }
],
"msg": "Unknown",
"success": true
}

店铺:

Ext.define('myApp.store.Forms', {
extend: 'Ext.data.Store',
alias: 'store.Form',
model: 'myApp.view.FormModel',

constructor: function(config) {
    var me = this;

    config = config || {};

    me.callParent([Ext.apply({
        autoLoad: true,

        proxy: {
            type: 'ajax',
            url: 'url_to_service',

            reader: {
                type: 'json',
                rootProperty: 'data',
                successProperty : 'success'
            }
        },        

        storeId: 'formStore'

    }, config)]);    

    // console.error("store loaded");
    // console.info(me);
}
});

型号

Ext.define('myApp.view.FormModel', {
extend: 'Ext.data.Model',

data: {
    name: 'myApp'
}
});

控制器

Ext.define('myApp.view.FormController', {
extend: 'Ext.app.ViewController',
alias: 'controller.form',

init: function(application) {
    var store = new myApp.store.Forms();

    store.on("metachange", metaChanged, this);

    function metaChanged(store, meta) {
        var grid = Ext.ComponentQuery.query('form')[0];
        grid.fireEvent('metaChanged', store, meta);
    };

    this.control({
        "form": {
            metaChanged: this.handleStoreMetaChange
        }
    });    
},

handleStoreMetaChange: function(store, meta) {
    var form = Ext.ComponentQuery.query('form')[0];
    form.reconfigure(store, meta.data);
}
});

至少 view 我想从商店创建项目。

Ext.define('myApp.view.Form', {
extend: 'Ext.form.Panel',
xtype: 'form',

controller: "form",

viewModel: {
    type: "form"   
},

title: 'form',
bodyPadding: 10,
autoScroll: true,

defaults: {
    anchor: '100%',
    labelWidth: 100
},


// How can I add form items here? 


});

在您的视图中,您需要创建一个函数来匹配您在控制器中进行的 form.reconfigure(store, meta.data) 调用.

并且在该函数中,您可以调用表单的 add 函数向表单添加项目。由于您已经在数据结构中提供了 xtype 和配置参数,因此每个项目都可以传递给 add 函数。它看起来像下面的代码...

reconfigure: function(store, data) {                
    var me = this;
    Ext.each(data, function(item, index) {
        me.add(item);
    });
}

我已经拼凑了一个 Example Fiddle 来展示这个工作原理。我只是模拟了数据加载和 'metachange' 事件,因为它更容易让演示工作。