之前在项目遇到一个问题就是使用很多的Window进行新增,修改的操作,每个Window都添加上一个FormPanel。
1、添加起来比较麻烦。2、在Window再添加FormPanel肯定生成的Div会更多了,而且阅读起来也比较麻烦。
3、还有就是很多同学喜欢使用使用field.setValue去赋值,其它FormPanel中就提供了loadRecord。很方便进行FormPanel的字段赋值。
在这里自己写了一个自定义的WindowForm,由于这是之前写的,所以没有写注释,而且现在也不太记录一些绿细节了,只是提供一下代码。
Ext.ux.WindowForm = function(cfg) {
Ext.apply(this, {
labelWidth : 100,
labelAlign : 'right',
minimizable : true,
resizable : false,
layout : 'form',
closeAction : 'hide',
modal:true,
defaultType : 'textfield'
});
Ext.ux.WindowForm.superclass.constructor.apply(this, arguments);
}
Ext.extend(Ext.ux.WindowForm, Ext.Window, {
initComponent : function() {
this.form = this.createForm();
Ext.ux.WindowForm.superclass.initComponent.call(this);
this.bodyCfg = {
tag : 'form',
cls : this.baseCls + '-body',
method : this.method || 'POST',
id : this.formId || Ext.id()
};
if (this.fileUpload) {
this.bodyCfg.enctype = 'multipart/form-data';
}
this.initItems();
this.addEvents(
/**
* @event clientvalidation
* 如果配置项monitorValid为true,那么为通知验证的状态(valid
* state)该事件将不断地触发。 If the monitorValid config
* option is true, this event fires repetitively
* to notify of valid state
* @param {Ext.form.FormPanel}
* this
* @param {Boolean}
* valid 如果客户端验证都通过的话传入一个true true if the
* form has passed client-side validation
*/
'clientvalidation');
this.relayEvents(this.form, ['beforeaction', 'actionfailed',
'actioncomplete']);
},
//
createForm : function() {
delete this.initialConfig.listeners;
return new Ext.form.BasicForm(null, this.initialConfig);
},
getForm : function() {
return this.form;
},
isField : function(c) {
return !!c.setValue && !!c.getValue && !!c.markInvalid
&& !!c.clearInvalid;
},
submit : function(options) {
return this.form.submit(options);
},
loadRecord : function(record) {
this.record = record;
return this.form.loadRecord(record);
},
initFields : function() {
var f = this.form;
var windowForm = this;
var fn = function(c) {
if (windowForm.isField(c)) {
f.add(c);
}
if (c.isFieldWrap) {
Ext.applyIf(c, {
labelAlign : c.ownerCt.labelAlign,
labelWidth : c.ownerCt.labelWidth,
itemCls : c.ownerCt.itemCls
});
f.add(c.field);
} else if (c.doLayout && c != windowForm) {
Ext.applyIf(c, {
labelAlign : c.ownerCt.labelAlign,
labelWidth : c.ownerCt.labelWidth,
itemCls : c.ownerCt.itemCls
});
if (c.items) {
for (var index = 0; index < c.items.length; index++) {
fn.call(this, c.items[index]);
}
}
}
};
this.items.each(fn, this);
},
onReset : function() {
if (this.record) {
this.loadRecord(this.record);
} else {
this.form.reset();
}
},
// private
onRender : function(ct, position) {
this.initFields();
Ext.ux.WindowForm.superclass.onRender.call(this, ct, position);
this.form.initEl(this.body);
if (this.record) {
this.loadRecord(this.record);
}
}
});
上面是自定义的控件,下面是如何使用这个控件的方法:
//首先当然是创建这个Window
var testwindow = new Ext.ux.WindowForm({});
//修改
var categoryModCategory = new Ext.Action({
text : syscommon.updatebtn,
handler : function() {
var sm = grid.getSelectionModel();//选择表格的一条记录
if (sm.getSelected()) {
testwindow.loadRecord(sm.getSelected());//把选择记录赋值给Window
testwindow.show();//显示window
} else {
msgwarn(syscommon.pleaseselect);
}
}
});
//新增
var categoryAddAction = new Ext.Action({
text : syscommon.createbtn,
handler : function() {
//要根据实际情况,创建一个空记录
var nullrecord = new Ext.data.Record({
catname : '',
cattype : 1
});
testwindow.loadRecord(nullrecord);//把空记录赋值给Window,这样每次添加都会是空
}
});
分享到:
相关推荐
本话题主要关注如何在EXTJS3的Window组件中实现一个功能:当用户在窗口内修改了数据后,关闭窗口时提示用户是否保存更改。未进行修改的情况下,窗口可以直接关闭,不显示任何提示。 首先,我们需要创建一个基本的...
1. **EXTJS 2.0**:作为基础框架,EXTJS 2.0提供了各种UI组件,如表格(Grid)、窗口(Window)、表单(Form)等,用于构建前端界面。 2. **RemoteCheckboxGroup.js**:这是一个自定义组件,用于动态生成表字段,...
1. **用户界面**:ExtJS提供了多种组件,如`Ext.container.Viewport`用于全屏布局,`Ext.window.Window`用于创建弹出窗口,`Ext.panel.Panel`用于创建面板,以及`Ext.form.field.Text`和`Ext.form.field.TextArea`...
例如,`Ext.grid.Panel`用于创建网格,`Ext.form.Panel`用于创建表单,而`Ext.window.Dialog`则用于弹出对话框。这些组件可以通过配置项自定义样式、行为,甚至可以实现复杂的布局和数据绑定。 在EXTJS与asp.net的...
5. **API使用**:熟悉ExtJS 4.1提供的各种类库,如Grid、Panel、Window、Form等,以及它们的方法和属性。 6. **主题和皮肤**:了解如何自定义ExtJS的外观,包括使用SASS和Compass工具来修改主题。 7. **MVC模式**...
通过学习这些实例,你可以更好地理解如何在实际项目中应用ExtJs,例如如何创建网格(Grid)、表单(Form)、树形视图(Tree)、面板(Panel)等。实例通常包括完整的HTML、CSS和JavaScript代码,以及详细的解释,...
1. **ExtJS核心库**:ExtJS的核心库包括一系列基础组件,如窗口(Window)、面板(Panel)、表单(Form)、菜单(Menu)、工具栏(Toolbar)等。在Desktop应用中,这些组件被用来构建桌面环境下的各种元素,如快捷...
1. **自定义组件(Custom Components)**:EXTJS允许开发者创建自定义组件,扩展其功能以满足特定需求。 2. **主题(Themes)**:EXTJS 3.0支持皮肤和主题,开发者可以根据品牌或设计需求更改UI样式。 3. **性能...
ExtJs3提供了一个丰富的组件模型,包括各种UI组件,如窗口(Window)、面板(Panel)、表格(Grid)、表单(Form)、菜单(Menu)等。这些组件都具有高度可定制性,可以通过配置属性和事件来满足不同的需求。例如,...
1. **组件系统**:ExtJS的核心在于其强大的组件化体系,它包含了一系列可复用的UI组件,如表格(Grid)、面板(Panel)、窗口(Window)、按钮(Button)等。这些组件具有丰富的功能和自定义选项,可以组合成复杂的...
- **组件模型**:ExtJS基于组件化设计,每个UI元素都是一个可复用的组件,如窗口(Window)、表格(Grid)、表单(Form)等。 - **布局管理**:ExtJS提供多种布局方式,如Fit布局、Border布局、Table布局等,使得...
1. **组件系统**:ExtJS的核心在于其组件模型,包括窗口(Window)、面板(Panel)、表格(Grid)、表单(Form)等。每个组件都是可复用的,可以通过组合这些组件构建复杂的UI结构。 2. **数据绑定**:ExtJS提供了...
5. 自定义内容:对话框内部可以包含各种Extjs组件,如`Ext.form.Panel`用于创建表单,`Ext.grid.Panel`用于显示数据网格等。例如: ```javascript items: [{ xtype: 'form', items: [{ xtype: 'textfield', ...
1. **组件系统**:EXTJS的核心是其组件模型,包括窗口(Window)、面板(Panel)、表单(Form)、表格(Grid)、树(Tree)等。这些组件都是可重用的,可以组合起来构建复杂的用户界面。 2. **数据绑定**:EXTJS...
ExtJs 3.3包含了一系列丰富的组件,如面板(Panel)、表格(Grid)、窗口(Window)、表单(Form)等,这些组件构成了其强大的用户界面构建基础。每个组件都有自己的属性、方法和事件,可以灵活组合和定制,以满足...
学习如何创建和配置各种组件,如Grid、Form、Window、Panel等,以及如何使用布局管理器来组织这些组件。 3. **数据绑定**:4.2版本强化了双向数据绑定,使得视图和模型之间的数据同步更加自动化。理解Data Binding...
1. **组件(Components)**:EXTJS的核心在于其强大的组件系统,如GridPanel(数据网格)、FormPanel(表单)、TabPanel(选项卡)和Window(弹出窗口)等,这些组件都具有丰富的配置项和事件处理机制。 2. **数据...
1. **组件系统**:ExtJS的核心是其强大的组件模型,允许开发者创建各种自定义UI元素,如表格、面板、窗口、菜单等。这些组件都是可重用的,并且可以组合成复杂的用户界面。 2. **布局管理**:ExtJS提供多种布局方式...
它提供了一套丰富的UI组件,如表格(Grid)、面板(Panel)、窗口(Window)、表单(Form)、菜单(Menu)等,这些组件可以灵活组合,快速构建出复杂的Web应用界面。 2. **数据绑定**:ExtJS 3.2支持双向数据绑定,...
9. **工具提示(Tooltips)**:EXTJS2提供了自定义的工具提示功能,可以显示丰富的信息,增强用户体验。 10. **拖放(Drag and Drop)**:EXTJS2支持组件之间的拖放操作,可以轻松实现文件或数据的移动和排序。 ...