2010-03-14 31 views
10

Tôi đang sử dụng ExtJS để tạo ra một FormPanel:Set giá trị trường mẫu trong ExtJS

new Ext.FormPanel({ 
    labelAlign: 'top', 
    title: 'Loading Contact...', 
    bodyStyle:'padding:5px', 
    width: 600, 
    autoScroll: true, 
    closable: true, 
    items: [{ 
     layout:'column', 
     border:false, 
     items:[{ 
      columnWidth:.5, 
      layout: 'form', 
      border:false, 
      items: [{ 
       xtype:'textfield', 
       fieldLabel: 'First Name', 
       name: 'first_name', 
       id: 'first_name', 
       anchor:'95%' 
      }, { 
       xtype:'datefield', 
       fieldLabel: 'Birthdate', 
       name: 'birthdate', 
       width: 150, 
      }] 
     },{ 
      columnWidth:.5, 
      layout: 'form', 
      border:false, 
      items: [{ 
       xtype:'textfield', 
       fieldLabel: 'Last Name', 
       name: 'last_name', 
       anchor:'95%' 
      },{ 
       xtype:'textfield', 
       fieldLabel: 'Email', 
       name: 'email', 
       vtype:'email', 
       anchor:'95%' 
      }] 
     }] 
    },{ 
     xtype:'tabpanel', 
     plain:true, 
     activeTab: 0, 
     height:300, 
     /* 
     * By turning off deferred rendering we are guaranteeing that the 
     * form fields within tabs that are not activated will still be 
     * rendered. This is often important when creating multi-tabbed 
     * forms. 
     */ 
     deferredRender: false, 
     defaults:{bodyStyle:'padding:10px'}, 
     items:[{ 
      title:'Address', 
      layout:'form', 
      defaults: {width: 230}, 
      defaultType: 'textfield', 

      items: [{ 
       fieldLabel: 'Line1', 
       name: 'line1', 
       allowBlank:false, 
      },{ 
       fieldLabel: 'Line2', 
       name: 'line2', 
      },{ 
       fieldLabel: 'City', 
       name: 'city', 
       allowBlank: false, 
      },{ 
       xtype:"combo", 
       fieldLabel:"State", 
       name:"state", 
       hiddenName:"combovalue" 
       }, { 
       fieldLabel: 'Zipcode', 
       name: 'zipcode', 
       allowBlank: false, 
      }] 
     },{ 
      title:'Phone Numbers', 
      layout:'form', 
      defaults: {width: 230}, 
      defaultType: 'textfield', 

      items: [{ 
       fieldLabel: 'Home', 
       name: 'home_phone', 
      },{ 
       fieldLabel: 'Cell', 
       name: 'cell_phone' 
      },{ 
       fieldLabel: 'Emergency', 
       name: 'emergency_phone' 
      }] 
     },{ 
      cls:'x-plain', 
      title:'Notes', 
      layout:'fit', 
      items: { 
       xtype:'htmleditor', 
       name:'notes', 
       fieldLabel:'Notes' 
      } 
     }] 
    }], 

    buttons: [{ 
     text: 'Save' 
    },{ 
     text: 'Cancel' 
    }] 
}) 

Làm thế nào để truy cập vào các trường mẫu bằng tên để thiết lập giá trị của họ bằng tay? Cảm ơn

Trả lời

24

Đó là khá dễ dàng:

  • được bàn tay trên các hình thức phẳng (bằng cách đó là Ext.form.FormPanel và không chỉ Ext.FormPanel):

    var formPanel = new Ext.form.FormPanel({...}); 
    
  • có được cơ bản Ext.form.BasicForm

    var form = formPanel.getForm(); 
    
  • yo sau đó u có thể sử dụng findField(name) để lấy biểu mẫu form của bạn bằng tên của họ:

    var cellField = form.findField('cell_phone'); 
    
+0

Cảm ơn, thật dễ dàng. – jeremib

+0

Đơn giản hơn là chỉ cần cung cấp cho mỗi trường một id và làm 'Ext.getCmp ('cell_phone');'. Nó cũng nhanh hơn (tra cứu băm trực tiếp thay vì một vòng lặp nội bộ mỗi lần). –

+0

@bmoeskau: Đó là chính xác chỉ trong trường hợp bạn áp dụng một 'id' cho các trường biểu mẫu của bạn. 'Ext.getCmp()' (là một phím tắt cho 'Ext.ComponentMgr.get()') chỉ có thể truy xuất các thành phần theo các id của chúng. Sử dụng mã OP trình bày, 'Ext.getCmp ('cell_phone');' sẽ không hoạt động. –

19

Bạn cũng có thể thiết lập chúng với số lượng lớn bằng cách sử dụng các phương pháp setValues ​​().

ví dụ:

Ext.getCmp('formname').getForm().setValues({ 
fielda: 'value1', 
fieldb: 'value2' 
}) 
3

Nice! làm việc cho tôi: D

Nhưng bạn có thể thiết lập giá trị mặc định:

...
mục: [{
xtype: 'textfield',
fieldLabel: 'Tên',
tên: 'first_name',
id: 'first_name',
giá trị: 'somevalue',
neo: '95%'
},
...

Các vấn đề liên quan