如何制作动态表格

Posted

技术标签:

【中文标题】如何制作动态表格【英文标题】:how to make dynamic forms 【发布时间】:2012-11-27 07:46:45 【问题描述】:

我想保存数据(结果),但要保存三个同名字段。当一个被启用时,其他人被禁用。这个对我有用。但问题是,当我从网格中编辑它时,添加了两个值...... [in extjs 4 mvc]

这是我的看法

Ext.define('Ext4Example.view.employee.Education' ,
extend: 'Ext.window.Window',
alias : 'widget.education',
modal:true,
autoShow: true,
bodyPadding: 5,

initComponent: function () 

this.items = [
            
            xtype: 'form',
            id:'form',
            bodyStyle: 
                        background: 'none',
                        padding: '10px',
                        border: '0'
                       ,
            items: [
                
                    xtype: 'fieldcontainer',
                    items: [                

                        
                            xtype: 'combobox',
                            fieldLabel: 'Result Type',
                            emptyText:'Select Result Type',
                            displayField:'type',
                            valueField:'id',
                            store: 'TypeStocks',
                            name: 'type',
                            id:'type',
                            width: 265,                                
                            allowBlank:false,
                            anchor:'95%',
                            listeners : 
                                'select': 
                                    fn: function (combo, value) 
                                    var value=combo.getValue();
                                    if(value =='1')
                                    Ext.getCmp('cgpa').hide();
                                    Ext.getCmp('jak').hide();
                                    Ext.getCmp('sc').hide(); 
                                    Ext.getCmp('range').hide();
                                    Ext.getCmp('range').disable();
                                    Ext.getCmp('cgpa').disable();
                                    Ext.getCmp('division').enable();
                                    Ext.getCmp('division').show();
                                      
                                    else if(value =='2')
                                    Ext.getCmp('division').disable();
                                    Ext.getCmp('division').hide();
                                    Ext.getCmp('cgpa').enable();
                                    Ext.getCmp('cgpa').show(); 
                                    Ext.getCmp('jak').show(); 
                                    Ext.getCmp('sc').show(); 
                                    Ext.getCmp('range').enable();
                                          Ext.getCmp('range').show();                                                                              
                                    
                                  
                              
                           
                        ,
                        
                            xtype:'combobox',
                            fieldLabel: 'Division',
                            name: 'result',
                            emptyText:'Select Result',                            
                            store: Division,
                            id:'division',
                            width: 265,
                            anchor:'95%',
                            allowBlank:false
                        ,
                        
                        xtype:'fieldcontainer',
                        layout: 'hbox',
                        items:[  
                          
                            xtype:'label',
                            text:'Score',
                            hidden: true,
                            id:'sc'
                           ,
                         
                            xtype:'textfield',
                            name: 'result',
                            hidden: true,
                            width: 68,
                            margin:'0 0 0 75',
                            id:'cgpa',
                            anchor:'95%',
                            emptyText:'Score',
                            vtype : 'radius',
                            allowBlank:false
                        ,
                        
                            xtype:'textfield',
                            name: 'result',
                            hidden: true,
                            width: 68,
                            margin:'0 0 0 75',
                            id:'gpa',
                            anchor:'95%',
                            emptyText:'Score',
                            vtype : 'radiuss',
                            allowBlank:false
                        ,
                           
                           xtype:'label',
                           text:'of',
                           hidden: true,
                           margin:'0 5 0 5',
                           id:'jak'
                           ,
                        
                            xtype: 'combobox',
                            emptyText:'Range',
                            store: range,
                            name: 'range',
                            id: 'range',
                            margin:'0 5 0 5',
                            width: 65,
                            hidden: true,
                            anchor:'95%',
                            allowBlank:false,
                            listeners : 
                                'select': 
                                    fn: function (combo, value) 
                                    var value=combo.getValue();
                                 if(value =='5.00') 
                                    Ext.getCmp('outOf').setValue(1);
                                    Ext.getCmp('cgpa').enable();
                                    Ext.getCmp('cgpa').show();
                                    Ext.getCmp('gpa').setValue('');
                                    Ext.getCmp('gpa').disable();
                                    Ext.getCmp('gpa').hide();
                                  
                                  else if(value =='4.00')
                                    Ext.getCmp('outOf').setValue(0);
                                    Ext.getCmp('gpa').enable();
                                    Ext.getCmp('gpa').show();
                                    Ext.getCmp('cgpa').setValue('');
                                    Ext.getCmp('cgpa').disable();
                                    Ext.getCmp('cgpa').hide();                                       
                                              
                               
                            
                          
                        ]                            
                        ,


                        
                     xtype: 'button',
                     text: 'SAVE',                                                   
                     iconCls: 'savee',
                     handler: function ()                                   
                            var form = this.up('form').getForm(),
                            values = form.getValues(); 

                      var education = Ext.create('Ext4Example.model.EducationModel',values);
                      // if (form.isValid())   
                          education.save(
                          success: function(education) 
                              var store = Ext.data.StoreManager.get('EducationStocks');
                              store = !store ? Ext.create("EducationStocks") : store;                                   
                              store.load();

                          ,
                          failure: function(education)                                 
                                Ext.Msg.alert('Failed', 'Data already exits');
                          

                           );
                      //  

                    
                ,
                
                     xtype: 'button',
                     text: 'Cancel',
                     margin:'0 0 0 5',
                     scope: this,
                     handler: this.close
                ]  
         ]

];
    this.callParent(arguments);

);

          ---------------

型号

Ext.define('Ext4Example.model.EducationModel', 
extend: 'Ext.data.Model',
idProperty: 'id',
fields: [                   
    name: 'result', mapping:'result', type: 'string' ,
    name: 'outOf', mapping:'outOf', type: 'int' 

],
 proxy: 
    type: 'ajax',
    noCache: false,
    api: 
        create  : '$createLink(controller:'education', action: 'create')'
    ,
    actionMethods: 
        create : 'POST'            
    ,        
    reader: 
        type: 'json',
        root: 'data',
        totalProperty   : 'total',
        successProperty : 'success',
        messageProperty : 'message',
        implicitIncludes: true
    ,
    writer: 
      type: 'json',
      root: 'data',
      writeAllFields: true 
    ,
    simpleSortMode: true
,
belongsTo: [model:'Ext4Example.model.ExamModel', name:'exams']

);

【问题讨论】:

问题不清楚。 “我从网格编辑它,两个,添加值............ [在 extjs 4 mvc 中]”是什么意思? 好吧,当我在表单中添加相应的值时,我会将其显示到网格中。通过双击网格的行,我打开一个新窗口来编辑这些条目。编辑后,我找到相应的网格单元格,其中包含额外的两个逗号(,,)。 【参考方案1】:

如果多个字段中的两个同名,则在提交表单时,将同名的字段组合成一个数组,然后提交。因此,如果您检查提交给服务器的参数,它们将是:

type : typeValue
result : [resultFromCombo, resultFromTextField1, resultFromTextField2]
range : rangeValue

所以在服务器中,我认为您是直接将结果数组转换为字符串并保存。在将结果数组转换为字符串时,它将转换为resultFromCombo, resultFromTextField1, resultFromTextField2。因此,您在网格中得到了 2 个逗号。

【讨论】:

如果不是这样,请发布解决方案。帮助社区。​​span>

以上是关于如何制作动态表格的主要内容,如果未能解决你的问题,请参考以下文章

如何在可扩展的表格视图单元中制作动态集合视图

制作自定义的动态表格视图单元格

如何根据excel电子表格中的指向值在公式中制作动态单元格

JS 如何动态插入表格

动态生成表格制作

如何通过在表格中动态生成的按钮上的“onclick”删除表格中的一行?