我必须做一些完全错误的事情,但是没有为以下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: 'user@domain.com'
},{
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设置为“checkbox”,则会相应地选中复选框。如果我将defaultType设置为“textfield”,则会填充文本字段。我有什么想法我做错了吗?
答案 0 :(得分:2)
答案 1 :(得分:2)
inputType
不适合此配置。 xtype
会更合适(并且defaultType
适用于此)。如果您阅读了FormPanel.defaultType
的文档:
“孩子的默认 xtype 部件...“
也许配置实际上应该defaultXType
更精确......无论如何,虽然inputType
在技术上是一个有效的配置,但它实际上是一种用于直接修改字段HTML的低级配置type属性(它不常用)。因此,在您的代码中,您实际上是创建复选框组件,然后更改其HTML类型属性,这不是Ext所期望的。切换到xtype
代替所有字段,一切都应该按预期工作。
答案 2 :(得分: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 */
}
],
我的基础是Ext 3.3文档,所以你需要调整你正在使用的版本。