EXTJS:如何从JSON文件加载Ext.form.panel项配置

时间:2015-09-03 11:37:50

标签: javascript json extjs extjs4.2

下面是我的表单定义,里面我想从json文件中为 items 属性赋值,其中包含有关fieldLabel,name,xtype等的信息,所以我有任何办法可以做到这一点?

Ext.define('com.myproject.view.myform', {
extend:'Ext.form.Panel',    
alias: 'widget.myform',
xtype : 'myform',
autoShow : true,
width: 500,
height: 400,
title: 'Foo',
floating: true,
closable : true,
items: [{
    fieldLabel: 'ID',
    name: 'filterID',
    xtype : 'textfield',
    allowBlank: false
},{
    fieldLabel: 'LABEL',
    name: 'filterLabel',
    xtype : 'textfield',
    allowBlank: false
}] });

JSON文件

{"itemsConfiguration": [{
    "fieldLabel": "ID",
    "name": "filterID",
    "xtype" : "textfield",
    "allowBlank": false
},{
    "fieldLabel": "LABEL",
    "name": "filterLabel",
    "xtype" : "textfield",
    "allowBlank": "false"
}]}

2 个答案:

答案 0 :(得分:1)

Ext.define('com.myproject.view.myform', {
    extend:'Ext.form.Panel',    
    alias: 'widget.myform',
    xtype : 'myform',
    autoShow : true,
    width: 500,
    height: 400,
    title: 'Foo',
    floating: true,
    closable : true,
    initComponent:function() {
        var me = this,
            args = arguments;
        Ext.Ajax.request({
            // TODO fill url etc.
            callback:function(response) {
                Ext.apply(me,{
                    items:Ext.decode(response.responseText).itemsConfiguration
                });
                me.callParent(args);
            }
        });
    },
});

答案 1 :(得分:1)

Ext.define('com.myproject.view.myform', {
    extend:'Ext.form.Panel',    
    alias: 'widget.myform',
    xtype : 'myform',
    autoShow : true,
    width: 500,
    height: 400,
    title: 'Foo',
    floating: true,
    closable : true,
    initComponent:function() {
        var me = this;

        me.callParent(arguments);

        Ext.Ajax.request({
            url: 'path/to/endpoint',
            callback:function(response) {
                var obj = Ext.decode(response.responseText),
                    items = obj.itemsConfiguration;

                Ext.suspendLayouts();
                Ext.applyIf(me,{
                    items: items
                });
                me.updateLayout(); // Will calculate margins/paddings/etc.
                Ext.resumeLayouts(true);
            }
        });
    }
});