带有数组名称的ExtJS表单

时间:2013-01-29 11:05:44

标签: forms model-view-controller extjs4

我不会构建一个用户联系表单,其中包含两个包含相同字段但使用不同语言的选项卡。使用MVC和ExtJS 4.0.7。

我不会重复使用 userinfo 面板..只需给它一个参数 langKey = en / fr

包含用户信息的标签窗口小部件如下所示:

Ext.define('MyApp.view.user.FormUserInfo', {
     extend: 'Ext.Panel',
     alias: 'widget.userinfo', 
     defaultType: 'textfield',

     items: [
     { 
         name: 'first_name['+langKey+']',
     }, {
         name: 'last_name['+langKey+']',  
     }]
 });

表单加载如下:

Ext.define('MyApp.view.user.Form', {
    extend: 'Ext.FormPanel',
    xtype: 'form',
    items: [
    {
        xtype: 'tabpanel',  
        activeTab: 2,
        items:[
        {
            xtype: 'userinfo',
            cls: 'en',
            tabConfig: {
                title: 'Contact Details(EN)'
            }
        },{
            xtype: 'userinfo',
            cls: 'de',
            tabConfig: {
                title: 'Contact Details(DE)'
            } 
        }]// /TabPanel.items
    }]// /FormPanel.items
});

事实上,表单包含10个以上的字段和 2个或更多语言..所以我需要对数据进行良好的控制。

使用窗口小部件或我可以使用的属性时传递变量的任何方法? 我试图使用面板类( cls 'first_name['+this.cls+']',但范围是错误的或某些东西(并且有点难看)。

1 个答案:

答案 0 :(得分:2)

执行此操作的一种简单方法是将自定义配置属性添加到用户信息面板,然后将自定义配置值应用于initComponent()中的字段名称。

示例:

Ext.define('UserInfo', {
    extend: 'Ext.Panel',
    alias: 'widget.userinfo', 
    defaultType: 'textfield',
    langKey: 'en',
    initComponent: function() {
        var me = this;
        Ext.apply(me, {
            items: [
             { 
                 fieldLabel: 'First Name '+me.langKey,
                 name: 'first_name['+me.langKey+']',
             }, {
                 fieldLabel: 'Last Name '+me.langKey,
                 name: 'last_name['+me.langKey+']',  
             }]            
        });
        me.callParent( arguments );
    }

});

然后,您可以通过自定义配置,就像使用其他任何配置一样:

{
    xtype: 'userinfo',
    lankKey: 'en',
    tabConfig: {
        title: 'Contact Details(EN)'
    }
}

Here's a live example of it.