`

ExtJs自定义带Form功能的Window

 
阅读更多

 之前在项目遇到一个问题就是使用很多的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,这样每次添加都会是空

}

});

 

 

0
2
分享到:
评论
2 楼 lyndon.lin 2011-11-17  
和formpanel使用提交方式一样。
1 楼 yepingping 2011-11-09  
使用了这个扩展,form的数据怎么提交到后台啊,url怎么设置,我测试了下,好像不行提交。

相关推荐

    extjs3 window窗口修改完退出提示是否保存

    本话题主要关注如何在EXTJS3的Window组件中实现一个功能:当用户在窗口内修改了数据后,关闭窗口时提示用户是否保存更改。未进行修改的情况下,窗口可以直接关闭,不显示任何提示。 首先,我们需要创建一个基本的...

    extjs实现选择多表自定义查询功能 前台部分(ext源码)

    1. **EXTJS 2.0**:作为基础框架,EXTJS 2.0提供了各种UI组件,如表格(Grid)、窗口(Window)、表单(Form)等,用于构建前端界面。 2. **RemoteCheckboxGroup.js**:这是一个自定义组件,用于动态生成表字段,...

    ExtjS实现聊天功能

    1. **用户界面**:ExtJS提供了多种组件,如`Ext.container.Viewport`用于全屏布局,`Ext.window.Window`用于创建弹出窗口,`Ext.panel.Panel`用于创建面板,以及`Ext.form.field.Text`和`Ext.form.field.TextArea`...

    extjs简单示例。带程序。

    例如,`Ext.grid.Panel`用于创建网格,`Ext.form.Panel`用于创建表单,而`Ext.window.Dialog`则用于弹出对话框。这些组件可以通过配置项自定义样式、行为,甚至可以实现复杂的布局和数据绑定。 在EXTJS与asp.net的...

    Extjs4.1 小例子(适合extjs初学者学习使用)

    5. **API使用**:熟悉ExtJS 4.1提供的各种类库,如Grid、Panel、Window、Form等,以及它们的方法和属性。 6. **主题和皮肤**:了解如何自定义ExtJS的外观,包括使用SASS和Compass工具来修改主题。 7. **MVC模式**...

    ExtJs 实例+ExtJs中文教程(学习extjs必备)

    通过学习这些实例,你可以更好地理解如何在实际项目中应用ExtJs,例如如何创建网格(Grid)、表单(Form)、树形视图(Tree)、面板(Panel)等。实例通常包括完整的HTML、CSS和JavaScript代码,以及详细的解释,...

    ExtJS4中Desktop独立源代码+功能扩充

    1. **ExtJS核心库**:ExtJS的核心库包括一系列基础组件,如窗口(Window)、面板(Panel)、表单(Form)、菜单(Menu)、工具栏(Toolbar)等。在Desktop应用中,这些组件被用来构建桌面环境下的各种元素,如快捷...

    Extjs3.0 cookbook

    1. **自定义组件(Custom Components)**:EXTJS允许开发者创建自定义组件,扩展其功能以满足特定需求。 2. **主题(Themes)**:EXTJS 3.0支持皮肤和主题,开发者可以根据品牌或设计需求更改UI样式。 3. **性能...

    ExtJs3 演示系统

    ExtJs3提供了一个丰富的组件模型,包括各种UI组件,如窗口(Window)、面板(Panel)、表格(Grid)、表单(Form)、菜单(Menu)等。这些组件都具有高度可定制性,可以通过配置属性和事件来满足不同的需求。例如,...

    extjs2.1库文件

    1. **组件系统**:ExtJS的核心在于其强大的组件化体系,它包含了一系列可复用的UI组件,如表格(Grid)、面板(Panel)、窗口(Window)、按钮(Button)等。这些组件具有丰富的功能和自定义选项,可以组合成复杂的...

    ExtJS 3.4 源码包

    - **组件模型**:ExtJS基于组件化设计,每个UI元素都是一个可复用的组件,如窗口(Window)、表格(Grid)、表单(Form)等。 - **布局管理**:ExtJS提供多种布局方式,如Fit布局、Border布局、Table布局等,使得...

    中文的Extjs的api手册

    1. **组件系统**:ExtJS的核心在于其组件模型,包括窗口(Window)、面板(Panel)、表格(Grid)、表单(Form)等。每个组件都是可复用的,可以通过组合这些组件构建复杂的UI结构。 2. **数据绑定**:ExtJS提供了...

    基于Extjs的模态对话框

    5. 自定义内容:对话框内部可以包含各种Extjs组件,如`Ext.form.Panel`用于创建表单,`Ext.grid.Panel`用于显示数据网格等。例如: ```javascript items: [{ xtype: 'form', items: [{ xtype: 'textfield', ...

    EXTJS3.0中文API (离线)

    1. **组件系统**:EXTJS的核心是其组件模型,包括窗口(Window)、面板(Panel)、表单(Form)、表格(Grid)、树(Tree)等。这些组件都是可重用的,可以组合起来构建复杂的用户界面。 2. **数据绑定**:EXTJS...

    ExtJs 的中文API文档版本3.3

    ExtJs 3.3包含了一系列丰富的组件,如面板(Panel)、表格(Grid)、窗口(Window)、表单(Form)等,这些组件构成了其强大的用户界面构建基础。每个组件都有自己的属性、方法和事件,可以灵活组合和定制,以满足...

    extjs 4.2 开发 参考书

    学习如何创建和配置各种组件,如Grid、Form、Window、Panel等,以及如何使用布局管理器来组织这些组件。 3. **数据绑定**:4.2版本强化了双向数据绑定,使得视图和模型之间的数据同步更加自动化。理解Data Binding...

    extjs3.0开发包含示例api

    1. **组件(Components)**:EXTJS的核心在于其强大的组件系统,如GridPanel(数据网格)、FormPanel(表单)、TabPanel(选项卡)和Window(弹出窗口)等,这些组件都具有丰富的配置项和事件处理机制。 2. **数据...

    extjs2.02帮助文档

    1. **组件系统**:ExtJS的核心是其强大的组件模型,允许开发者创建各种自定义UI元素,如表格、面板、窗口、菜单等。这些组件都是可重用的,并且可以组合成复杂的用户界面。 2. **布局管理**:ExtJS提供多种布局方式...

    extjs3.2资源压缩包

    它提供了一套丰富的UI组件,如表格(Grid)、面板(Panel)、窗口(Window)、表单(Form)、菜单(Menu)等,这些组件可以灵活组合,快速构建出复杂的Web应用界面。 2. **数据绑定**:ExtJS 3.2支持双向数据绑定,...

    EXTJS2 API

    9. **工具提示(Tooltips)**:EXTJS2提供了自定义的工具提示功能,可以显示丰富的信息,增强用户体验。 10. **拖放(Drag and Drop)**:EXTJS2支持组件之间的拖放操作,可以轻松实现文件或数据的移动和排序。 ...

Global site tag (gtag.js) - Google Analytics