2010-11-15 60 views
2

我必須做一些完全錯誤的,但默認值是沒有得到以下ExtJS的形式設置:默認值是沒有得到設置ExtJS的表單值

var simple = new Ext.FormPanel({ 
     labelWidth: 75, // label settings here cascade unless overridden 
     frame:true, 
     title: 'Edit User', 
     bodyStyle:'padding:5px 5px 0', 
     width: 350, 
     defaults: {width: 230}, 
     defaultType: 'checkbox' 
     items: [{ 
       inputType: 'textfield', 
       fieldLabel: 'Email', 
       name: 'user[email]', 
       id: 'user_email', 
       vtype: 'email', 
       value: '[email protected]' 
      },{ 
       inputType: 'password', 
       fieldLabel: 'Password', 
       name: 'user[password]', 
       id: 'user_password', 
       allowBlank: false, 
       value: 'password' 
      },{ 
       inputType: 'checkbox', 
       boxLabel: 'Is One', 
       labelSeparator: '', 
       name: 'user[is_one]', 
       checked: true 
      },{ 
       inputType: 'checkbox', 
       boxLabel: 'Is Two', 
       labelSeparator: '', 
       name: 'user[is_two]', 
       checked: true 
      },{ 
       inputType: 'hidden', 
       name: 'authenticity_token', 
       value: '<%= form_authenticity_token %>' 
      },{ 
       inputType: 'hidden', 
       name: '_method', 
       value: 'put' 
      } 

     ], 

     buttons: [{ 
      text: 'Save', 
      handler: function(){ 
       if(simple.getForm().isValid()){ 
        simple.getForm().submit({ 
         url: '/users/<%= @user.id %>', 
         waitMsg: 'Saving...', 
         success: function(simple, o){ 
          msg('Success', 'done'); 
         } 
        }); 
       } 
      } 
     },{ 
      text: 'Cancel' 
     }] 
    }); 

    simple.render("user-form"); 

的DefaultType的似乎是鍵。如果我將defaultType設置爲「複選框」,則複選框會被正確檢查。如果我將defaultType設置爲'textfield',則會填充文本字段。任何想法我做錯了什麼?

回答

2

我相信你必須明確定義表單上的複選框項目xtype:checkbox配置選項。從ExtJS API Documentation

報價:

如果是的xtype沒有明確指定 ,用於該 容器中的缺省的類型。

+0

這是正確的,但我仍然不知道爲什麼。這些控件都呈現正確,他們只是沒有得到默認值設置。無論如何,默認爲textfield並指定xtype = checkbox,而不是inputType = checkbox解決了問題。 – ConsultUtah 2010-11-15 15:10:03

+0

請參閱我的回答以澄清此問題。 – 2010-11-18 06:15:01

0

編輯:使用xtype而不是構建items陣列中的控件。參見上面的接受答案。

看起來像defaultType配置參數是爲了您的方便而提供的:它允許您在items數組中提供配置對象而不是「實例化組件」。這意味着你需要在你的items陣列明確創建其他類型的控件。請參閱FormPanel的API文檔。

試試這個:

var simple = new Ext.FormPanel({ 
    /* snip */ 
    defaultType: 'checkbox', 
    items: [ 
     new Ext.form.TextField({ 
       fieldLabel: 'Email', 
       /* snip */ 
      }), 
     { 
      boxLabel: 'Is One', 
      /* snip */ 
     } 
    ], 

我立足這一關的分機3.3文件,所以您需要調整您正在使用的版本。

+0

沒有必要通過這樣的參照創建組件。 OP的問題在於使用'inputType'而不是正確的'xtype'。 – 2010-11-18 06:15:59

+0

好點。我更新了我的回覆。 – lawnsea 2010-11-18 17:04:11

2

inputType不是適當的配置。 xtype會更合適(是什麼defaultType適用)。如果你讀了FormPanel.defaultType文檔:

「的默認的xtype孩子的 組件......」

也許配置實際上應該是defaultXType更精確...無論如何,而inputType在技術上是一個有效的配置,它實際上是那種用於直接修改字段的HTML類型的屬性(它不常用)水平較低的配置。因此,在您的代碼中,您實際上正在創建複選框組件,但隨後更改了它們的HTML類型屬性,這不是Ext所期望的。切換到xtype,而不是對所有字段和你所期望的一切應該工作。