这个例子主要完成利用ExtJs存储器store实现了表单的增加,修改和删除的功能
分成三部分。1.表单 2.窗口 3.表格
表单中包含文本框等form组件,为增加和修改页面提供了FormPanel对象。
1.表单
//利用继承写法的目的是使formInfo组件化,添加页面和修改页面可以实例化自己的formInfo,forInfo对象如下:
formInfo = Ext.extend(Ext.form.FormPanel,{
constructor:function(){
formInfo.superclass.constructor.call(this,{
width:500 ,
height : 400 ,
frame : true ,
defaultType : 'textfield' ,
defaults : {
anchor : '90%'
} ,
//实例化form组件
items : [{
fieldLabel : '姓名' ,
name : "name"
},{
fieldLabel : '年龄' ,
name : 'age' ,
vtype : 'age'
},{
xtype : 'combo' ,
name : "sex" ,
typeAhead : true ,
fieldLabel : '性别' ,
triggerAction : 'all' ,
mode : 'local' ,
store : new Ext.data.SimpleStore({
data : [[1,'男'] , [2,'女']] ,
fields : ['myid' , 'mytext']
}) ,
valueField : 'myid' ,
displayField : 'mytext'
}] ,
//定义方法。取得当前form的输入的值
getValue : function(){
if(this.getForm().isValid()){
return new Ext.data.Record(this.getForm().getValues())
}else{
throw Error("年龄输入有错误") ;
}
} ,
//将Record对象_rset到form表单中
setValue : function(_r){
this.getForm().loadRecord(_r) ;
} ,
//清空表单
resets : function(){
this.getForm().reset() ;
}
}) ;
}
}) ;
2:
基类窗体。 基类窗体是为添加页面的窗体和修改页面的窗体提供了一个基类。基类窗体中定义了一个form属性,他就是上面提到的formInfo,在基类的构造函数中初始化了form属性,及new formInfo(),在实现添加和修改的时候可以直接继承基类窗体。而不用继承Ext.window,基类窗体中添加了一个submit事件,当点击确定按钮的时候触发该事件,并将他本身和form中的值作为参数传递。代码如下
var infoWin = Ext.extend(Ext.Window,{
form : null , //定义属性form
closeAction : 'hide' ,
constructor : function(){
//在构造函数中初始化form属性
this.form = new formInfo() ;
infoWin.superclass.constructor.call(this,{
width : 500 ,
height : 400,
frame : true ,
items : this.form ,
buttons : [{
text : '确定' ,
//当点击确定的时候执行onAddSubmit方法
handler :this.onAddSubmit ,
scope : this
},{
text : '取消' ,
handler : this.close ,
scope : this
}]
}) ;
//添加一个事件submit
this.addEvents("submit") ;
} ,
//当点击确定后触发的事件
onAddSubmit : function(){
try{
//触发submit事件并传递参数this--窗体本身和this.form.getValue()--form中输入的值
this.fireEvent("submit" , this,this.form.getValue()) ;
}catch(err){
return ;
}
} ,
//关闭表单
close : function(){
this.form.resets() ;
this.hide() ;
}
}) ;
添加页面窗体和修改页面窗体
在这两个窗体中都继承了基类窗体,及infoWin,继承之后他们就有了基类窗体的所有属性,方法和事件,根据他们不同的需求实现submit触发后的功能,代码如下:
var addWin = Ext.extend(infoWin,{
title : '添加信息'
}) ;
var updateWin = Ext.extend(infoWin,{
title : '修改信息' ,
//添加方法,作用是把列表中选中的行的记录现实在表单中
setValue : function(_r){
this.form.getForm().loadRecord(_r) ;
}
}) ;
gridInfo对象
gridInfo对象的作用是显示表格,它定义了属性addWin和updateWin,分别是addWin和updateWin的实例,根据需要定义了一系列的方法,代码如下:
gridInfo = Ext.extend(Ext.grid.GridPanel,{
addWin:null ,
updateWin :null ,
constructor:function(){
this.addWin = new addWin() ;
this.updateWin = new updateWin() ;
gridInfo.superclass.constructor.call(this,{
title:'表格信息' ,
width:350 ,
height : 400 ,
tbar:[{
text : '添加' ,
listeners:{
'click' :{
fn:function(){
this.addWin.show() ;
},
scope : this
}
}
},{
text : '修改' ,
listeners : {
'click' : {
fn : function(){
try{
this.updateWin.setValue(this.getSelect()) ;
this.updateWin.show()
}catch(e){
Ext.Msg.alert("系统提示",e.description) ;
}
},
scope : this
}
}
},{
text : '删除' ,
listeners : {
'click' : {
fn : function(){
this.onRemoveClick(this) ;
} ,
scope : this
}
}
}] ,
colModel: new Ext.grid.ColumnModel([{
header:'姓名'
},{
header:'年龄'
},{
header:'性别'
}]) ,
store:new Ext.data.Store({
data:[['张三',28,'男'],['李四',30,'女']] ,
reader:new Ext.data.ArrayReader({
},Ext.data.Record.create([{
name : 'name'
},{
name : 'age'
},{
name : 'sex'
}]))
}) ,
sm : new Ext.grid.RowSelectionModel({
single:true ,
listeners:{
'rowselect' : {
fn:function(_sel,_index,_record){
this.fireEvent('rowselect',_record) ;
},
scope:this
}
}
}) ,
renderTo:Ext.getBody() ,
//表格中添加一条数据
insert : function(_r){
this.store.add(_r) ;
} ,
//当点击添加后触发的事件
onInsertSubmit : function(_win,_r){
this.insert(_r) ;
_win.close() ;
},
//显示修改界面
showUpdateWin : function(){
this.updateWin.show() ;
} ,
onUpdateSubmit : function(_win,_r){
this.update(_r) ;
_win.close() ;
} ,
update : function(_r){
//alert(Ext.util.JSON.encode(_r.data)) ;
var rs = this.getSelect() ;
for(_data in rs.data)
{
rs.set(_data,_r.get(_data)) ;
}
rs.commit() ;
} ,
onRemoveClick:function(_grid){
Ext.Msg.confirm("系统提示","是否删除记录",this.onRemoveRecord,this)
} ,
onRemoveRecord : function(msg){
if(msg == 'yes'){
this.removeRecord(this.getSelect()) ;
}
} ,
removeRecord : function(_r){
this.store.remove(_r) ;
} ,
//获得表格中选中的记录
getSelect : function(){
var _sel = this.getSelectionModel() ;
if(_sel.getCount()==0){
throw Error("请选择记录") ;
return ;
}else{
return this.getSelectionModel().getSelected() ;
}
}
}) ;
this.addEvents('rowselect') ;
this.addWin.on("submit",this.onInsertSubmit,this) ;
this.updateWin.on('submit',this.onUpdateSubmit,this) ;
}
}) ;
分享到:
相关推荐
它可能包含了创建表单、动态添加和删除字段的逻辑,以及与服务器通信的代码。通过阅读和分析这个文件,我们可以更深入地了解如何在实际项目中应用这些技术。 总之,动态添加表单是ExtJS开发中的一个重要技巧,它...
从提供的标签“源码”和“工具”来看,可能包含的资源kk.doc可能是一个示例代码文档或教程,展示了如何在ExtJS中创建和操作动态表单的详细步骤和代码片段。对于初学者来说,阅读和理解这样的文档有助于深入掌握动态...
- **创建表单组件**:首先,定义一个FormPanel,并在其内部添加所需的表单字段,例如`Ext.form.field.Text`、`Ext.form.field.Date`等。 - **配置表单行为**:为FormPanel设置action属性,指定提交的URL,或者在...
`Ext.form.Action`是ExtJS中的一个类,用于处理表单提交和加载数据的动作。它提供了多种配置选项和属性来控制表单操作的过程。 **配置项** - **success**: 执行成功后的回调函数,该函数接收两个参数:`form`(当前...
### Extjs 表单验证详解 #### 一、引言 在现代Web开发中,确保用户输入的有效性和安全性至关重要。Extjs作为一种强大的JavaScript框架,提供了丰富的功能来帮助开发者轻松实现客户端验证。本文将深入探讨Extjs中的...
网格是展示和操作大量结构化数据的利器。在ExtJS中,`Ext.grid.Panel`是创建网格的主要组件。你可以通过`columns`配置定义列,每列由一个对象表示,包含`text`(列标题)、`dataIndex`(对应数据源的字段名)和`...
在这个有关ExtJS的例子中,我们主要关注的是表单(Forms)的定义和Grid的实现。 表单在任何应用程序中都扮演着至关重要的角色,它们用于收集用户输入并将其发送到服务器进行处理。在ExtJS中,表单通常由各种字段...
在本文中,我们将深入探讨如何优化EXTJS中的Form表单提交过程,特别是在EXTJS应用程序中。EXTJS是一个强大的JavaScript框架,用于构建富客户端Web应用程序,而表单提交是任何应用程序中不可或缺的部分。优化这一过程...
EXTJS表单验证主要依赖于`Ext.form.field.Base`组件,它是所有表单字段的基础类。每个表单字段都可以配置验证规则,通过`vtype`属性定义基本的验证类型,或者使用`validators`属性自定义验证函数。对于特殊字符的...
- `Ext.form.FormPanel` 是 EXTJS 中用于创建表单的组件,它允许你添加各种表单元素如文本框、选择框等。 - 在实例中,`title` 属性定义了面板的标题,`frame` 为真表示面板具有边框,`plain` 设置为真让边框更...
ExtJS 4是一个强大的JavaScript库,用于创建富客户端应用程序,而Struts2是一个流行的Java服务器端MVC框架,常用于处理用户请求和业务逻辑。 **一、ExtJS 4基础知识** 1. **组件模型**:ExtJS 4基于组件模型,允许...
在“extjs-form:使用 Sencha ExtJS 的简单表单”这个主题中,我们将深入探讨如何利用 ExtJS 创建功能丰富的表单。 首先,让我们了解 ExtJS 表单的基本结构。一个表单通常由若干个字段(Field)组成,每个字段都有...
对于更复杂的需求,如动态添加或删除表单字段,FormPanel 提供了`add`和`remove`方法。同时,`loadRecord`方法可以用来从记录对象中加载表单数据,而`getValues`和`getRecord`则用于获取当前表单的值或转换为记录...
EXTJS 是一个强大的JavaScript 应用程序框架,用于构建富客户端Web应用。ColorField 是EXTJS 中的一个组件,专门用于颜色选择。在EXTJS 应用中,颜色选择器提供了用户友好的界面,使得用户能够方便地从预设的颜色...
1. **Store(存储)**:EXTJS中的数据存储,连接到模型并管理数据加载、刷新、添加、删除等操作,对应于数据库的CRUD操作。 2. **Grid(表格)**:显示和编辑数据的组件,通常与Store和Model结合使用,可以实现数据...
综上所述,“EXT form小例子”涵盖了EXTJS Form组件的基本用法和验证机制,特别是客户端验证和`Ext.form.Vtype`的扩展应用,对于理解和实践EXTJS表单开发具有很好的指导价值。通过深入学习和实践这些知识点,开发者...
标题中的"ExtJs 实现select列表选中项时添加删除"指的是在ExtJS应用中创建一个下拉选择列表(Select List),并且当用户选择某一项时,能够执行添加或删除操作。这通常涉及到事件监听、数据模型的操作以及用户界面的...
例如,Grid 用于显示和操作数据,Panel 用于组织内容,Form 用于数据输入和验证,Tree 用于展示层级关系的数据。 3. **数据绑定和Store**:在ExtJS中,数据通常通过Store对象来管理,它可以与服务器进行数据交换,...
在标题"extjs2----关于extjs 的使用,操作"中,我们可以看出这是一份关于ExtJS 2.0版本的使用指南,主要涵盖了其基本操作和应用。描述中提到内容较为初级,适合初学者学习,这表明我们将探讨的是ExtJS的基础概念和...