ExtJs Form表单的客户端添加修改和删除操作

这个例子主要完成利用ExtJs存储器store实现了表单的增加,修改和删除的功能
分成三部分。1.表单 2.窗口 3.表格

表单中包含文本框等form组件,为增加和修改页面提供了FormPanel对象。
[color=red][b]1.表单[/b][/color]

//利用继承写法的目的是使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:[color=red][b]基类窗体。[/b][/color] 基类窗体是为添加页面的窗体和修改页面的窗体提供了一个基类。基类窗体中定义了一个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() ;
}
}) ;
[color=red][b]添加页面窗体和修改页面窗体[/b][/color]
在这两个窗体中都继承了基类窗体,及infoWin,继承之后他们就有了基类窗体的所有属性,方法和事件,根据他们不同的需求实现submit触发后的功能,代码如下:
var addWin = Ext.extend(infoWin,{
title : '添加信息'
}) ;

var updateWin = Ext.extend(infoWin,{
title : '修改信息' ,
//添加方法,作用是把列表中选中的行的记录现实在表单中
setValue : function(_r){
this.form.getForm().loadRecord(_r) ;
}
}) ;

[color=red][b]gridInfo对象[/b][/color]
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) ;
}
}) ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例代码,演示了如何在 ExtJS 表单中集成 layui 富文本编辑器: ``` Ext.define('MyApp.view.MyFormPanel', { extend: 'Ext.form.Panel', xtype: 'myformpanel', requires: [ 'Ext.form.field.Text', 'Ext.form.field.Checkbox', 'Ext.form.field.ComboBox', 'Ext.form.field.HtmlEditor', 'Ext.layout.container.Form' ], layout: 'form', items: [ { xtype: 'textfield', fieldLabel: 'Title', name: 'title', allowBlank: false }, { xtype: 'checkbox', fieldLabel: 'Is Active', name: 'isActive', inputValue: true }, { xtype: 'combobox', fieldLabel: 'Category', name: 'category', store: ['Category 1', 'Category 2', 'Category 3'] }, { xtype: 'htmleditor', fieldLabel: 'Content', name: 'content', enableColors: false, enableAlignments: false, enableFontSize: false, enableFont: false, enableLinks: false, enableLists: false, enableSourceEdit: false, listeners: { afterrender: function(editor) { layui.use('layedit', function(){ var layedit = layui.layedit; layedit.build(editor.getEl().down('iframe').dom, { tool: [ 'strong', 'italic', 'underline', 'del', '|', 'left', 'center', 'right', 'link' ] }); }); } } } ] }); ``` 在上面的代码中,我们使用了 ExtJS 的表单组件,并将 layui 的富文本编辑器集成到了 ExtJS 的表单中。在 htmleditor 组件的 `afterrender` 事件中,我们使用了 layui 的 `layedit.build` 方法来初始化 layui 富文本编辑器。我们可以通过配置 `tool` 属性来指定需要显示的工具栏按钮。 请注意,这只是一个示例代码,你需要根据自己的实际情况进行修改

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值