六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 58|回复: 0

ext继承的两种写法

[复制链接]

升级  32%

26

主题

26

主题

26

主题

秀才

Rank: 2

积分
98
 楼主| 发表于 2013-1-29 11:41:35 | 显示全部楼层 |阅读模式
在使用extjs时,因为特殊的业务要求,extjs提供的功能不能满足业务逻辑,所以需要对其进行扩展,也就是所谓的继承,
在extjs中继承有两种写法
1。在ExtJS中使用Ext.extend()函数实现继承功能:
/**扩展树的多选模式,加了写业务逻辑方法validNodeHasFolder,并重写了select方法加入了业务逻辑**/Ext.ns("Ext.targsoft");Ext.targsoft.MultiSelectionModel = function(config){    Ext.apply(this, config);    Ext.targsoft.MultiSelectionModel.superclass.constructor.call(this);};Ext.extend(Ext.targsoft.MultiSelectionModel , Ext.tree.MultiSelectionModel,{validCount : 0 ,    select : function(node, e, keepExisting){        if(keepExisting !== true){            this.clearSelections(true);        }        if(this.isSelected(node)){            this.lastSelNode = node;            return node;        }        if(!node.isLeaf() && keepExisting ){        return ;        }                if(keepExisting && node.isLeaf() && this.validCount == 0 ){        alert(this.validCount );        this.validNodeHasFolder();        }                      this.selNodes.push(node);        this.selMap[node.id] = node;        this.lastSelNode = node;        node.ui.onSelectedChange(true);        this.fireEvent("selectionchange", this, this.selNodes);        return node;                    },    //判断选择的节点中是否含有文件夹,如果有那么就进行反选    validNodeHasFolder : function(){    this.validCount = 1 ;    for(var i=0 ; i< this.selNodes.length ; i++){    if(!this.selNodes[i].isLeaf()){    this.unselect(this.selNodes[i]);    }    }    }}); 
 
2.Extjs中替换constructor,写法如下:
Ext.ns('Ext.formdesign');Ext.formdesign.FormSort = Ext.extend(Ext.Window ,{constructor : function(_cfg){Ext.apply(this,_cfg);this.grid = this.createGrid();Ext.formdesign.FormSort.superclass.constructor.call(this,{title : '表单类别' ,width : 280 ,height : 270 ,closeAction : 'close' ,items :  [this.grid ] ,buttons : [{text : '关闭' ,scope : this ,handler : function(){this.close();}}]})},//创建表格createGrid : function(){//搜索var searchObjRecs = Ext.data.Record.create([   {name: 'formSortUuid', mapping: 'formSortUuid'},    {name: 'sortName', mapping: 'sortName'},   {name: 'description', mapping: 'description'}]);var searchObjSm = new Ext.grid.CheckboxSelectionModel({header : '' ,singleSelect: true});var searchObjStore = new Ext.data.Store({url : this.contextPath+'/formsort.do?method=getFormSortDatas',autoLoad : false ,reader: new Ext.data.JsonReader({   totalProperty: "total",   root: 'data',   id: 'formSortUuid'   },searchObjRecs ) }); /* var pagingBar = new Ext.PagingToolbar({pageSize: rowLimit_1,store: searchObjStore,displayInfo: true,displayMsg: '总数: {2}',emptyMsg: '没有数据'      });*/var searchObjGrid = new Ext.grid.GridPanel({id: 'searchObjGridId',store: searchObjStore,height : 202 ,autoScroll : true ,cm: new Ext.grid.ColumnModel([searchObjSm,{header: "编号", width: 100, dataIndex: 'formSortUuid', sortable: true,hidden: true},{header: "名称", width: 105, dataIndex: 'sortName', sortable: true} ,{header: "描述", width: 105, dataIndex: 'description', sortable: true} ]),tbar : [{text :'添加',handler : this.createRecord.createDelegate(this)},'-',{text :'修改',handler : this.updateRecord.createDelegate(this)},'-',{text :'删除',handler : this.delteRecord.createDelegate(this)}] ,frame: false,loadMask:{msg:"数据加载中...."},sm:searchObjSm   });    return searchObjGrid ;} ,//新建createRecord : function(){this.getWindow().show();this.getWindow().setTitle('新建表单类别');this.getForm().baseParams = {create : true } ;} ,//修改updateRecord : function(){var r = this.getGridSeleted();if(r){this.getWindow().show();this.getWindow().setTitle('修改表单类别');this.getForm().baseParams = {create : false } ;this.getForm().loadRecord(r);}} ,//删除记录 delteRecord: function(){var sort = this.protectId ? this.protectId : 'temp' ;var rec = this.getGridSeleted();if(rec){Ext.Msg.confirm('提示','确认删除<b>'+rec.get('sortName')+'</b>吗?',function(btn){if(btn == 'yes'){if(rec.get('formSortUuid') == sort){Ext.Msg.alert('提示','<b>'+rec.get('sortName')+'</b>是系统默认类别不能删除!');}else{Ext.Ajax.request({url : this.contextPath+'/formsort.do?method=delFormSort',params : {sortId : rec.get('formSortUuid')},scope : this ,callback :function(options ,success ,response ){if(success){var text = response.responseText ;if(text == '1'){Ext.Msg.alert('提示','删除成功!',function(btn){if(btn == 'ok'){this.grid.getSelectionModel().clearSelections(); this.grid.getStore().reload();}},this);}else if(text == '2'){Ext.Msg.alert('提示','<b>'+rec.get('sortName')+'</b>已经被业务对象使用不能进行删除!');}else{Ext.Msg.alert('提示','删除数据失败!');}}else{Ext.Msg.alert('提示','删除数据失败!');}}});}}},this)}},createForm : function(){var form = new Ext.form.FormPanel({frame : true ,defaultType : 'textfield' ,buttonAlign : 'center' ,labelAlign : 'right' ,labelWidth : 70 ,items : [{fieldLabel : 'id' ,xtype : 'hidden',name : 'formSortUuid'},{fieldLabel : '名称' ,name : 'sortName'},{fieldLabel : '描述' ,xtype : 'textarea' ,name : 'description'}] ,buttons : [{text : '确定' ,scope : this ,handler : function(){form.getForm().submit({                    url: this.contextPath+'/formsort.do?method=saveOrUpdateFormSort',                    waitTitle : '请等待' ,                    waitMsg: '正在提交中',                    scope : this ,                    success:function(form,action){                    this.getForm().reset();                    this.grid.getSelectionModel().clearSelections();                     this.grid.getStore().reload();                    this.getWindow().hide();                    },                    failure:function(form,action){                    Ext.Msg.alert('提示','保存失败!');                    }           });}} , {text : '取消' ,scope : this ,handler : function(){this.getForm().reset();this.getWindow().hide();}}]});return form ;} ,getForm : function(){var form = this.getFormPanel().getForm();return form ;} ,getFormPanel : function(){if(!this.gridForm){this.gridForm = this.createForm();} return this.gridForm ;} ,createWindow : function(){var form = this.getFormPanel();varwin = new Ext.Window({title : 'info' ,closeAction : 'hide' ,width : 300 ,height : 180 ,modal : true ,items : [form]});return win ;},getWindow : function(){if(!this.gridWindow){this.gridWindow = this.createWindow();} return this.gridWindow ;} ,//取到grid选择的记录getGridSeleted : function(){var sm = this.grid.getSelectionModel();if(sm.hasSelection()){return sm.getSelected() ;}else{Ext.Msg.alert('提示','请选择一条记录!');return null ;}} }) 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表