jhwcd 
王东 
等级:
 发表于:2008-08-01 20:12:511楼 得分:0 
好的,我先看看。 
//-----------------------------------------
谢谢!

解决方案 »

  1.   

    我把问题简单描述下:
    Ext.extend(AA,Ext.grid.EditGridPanel,{....});//定义AA从Ext.grid.EditGridPanel继承Ext.extend(BB,AA,{....});//定义BB从AA继承Ext.extend(CC,BB,{....});//定义CC从BB继承var cc=new CC();//实例化一个CC对象名称为cc//下面两段代码是创建一个Ext.Window对象win,把cc最为win的itemsvar win=new Ext.Window({
             width:438,
     height:315,
     buttonAlign:"center",
     title:'查询',
     modal:true,
     closeAction:"hide",
     items:[cc],
     buttons:[{text:"关闭",handler:function(){win.close();},scope:this}] 
           });
    win.show();
    此时如图:
    点击"关闭按钮",然后在不刷新的情况下点击“open”如图
      

  2.   

    EditGridPanel“点击某个单元格变为输入框”的实现原理是:给每列创建一个隐藏的可编辑div,当单击某个单元格时
    把这个div显示在Cell上面。通过调试,怀疑问题出在:点击关闭时,这个可编辑的div丢失了,而再次打开窗口时又没有创建这个可编辑的div,所以出错。
    //----------------------------------------------------
    小弟愚钝,已经搞一周了,毫无进展,望各位老大帮忙,谢谢
      

  3.   

    源代码下载后可直接运行
    下载地址:
    http://files.cnblogs.com/kuailewangzi1212/源代码解压开可执行cs。htm.rar
      

  4.   

    我在FF3.0,IE6.0里没有出现错误,
    只是关闭后,再打开,原来编辑过的列,都不能再编辑了!你的代码是:
    AA继承Ext.Panel 方法creategrid返回一个GridPanel
    BB继承AA,并重载方法creategrid,返回一个EditGridPanel
    CC继承BB
      

  5.   

    我在FF3.0,IE6.0里没有出现错误, 
    只是关闭后,再打开,原来编辑过的列,都不能再编辑了! 你的代码是: 
    AA继承Ext.Panel 方法creategrid返回一个GridPanel 
    BB继承AA,并重载方法creategrid,返回一个EditGridPanel 
    CC继承BB 
    //---------------------------------
      

  6.   

    有些地方太累赘去掉了//基类
    //------------------------------------------------------------------------------------------
    AA=Ext.extend(Ext.Panel,{    
       layout:"fit",      
        createstore:function()
        {
       return new Ext.data.SimpleStore(
              {
               data:[   ['1','mxh','aa','20080101','1','bb','bb'],
                        ['2','mxh','aa','20080101','1','bb','bb'],
                        ['3','mxh','aa','20080101','1','bb','bb'],
                        ['4','mxh','aa','20080101','1','bb','bb'],
                        ['5','mxh','aa','20080101','1','bb','bb'],
                        ['6','mxh','aa','20080101','1','bb','bb'],
                        ['7','zmm','aa','20080101','1','aa','aa']
                    ],
               fields:this.storeMapping
              }
             );                             
        },    
        creategrid:function()
        {
    return new Ext.grid.EditorGridPanel({
                store: this.store,
                cm: this.cm,//
                clicksToEdit:1
            });
        },                    
        initComponent : function()
        {   //初始化列表    
            this.store=this.createstore();//创建数据源               
            AA.superclass.initComponent.call(this);        
            this.grid=this.creategrid();      
        this.add(this.grid);//添加grid  
        //this.store.load();        
         }
    });//---------------------------------------------------------------------------------------------------------------------------
    CC=Ext.extend(AA,{
        title:'标题',
        width:400,
        height:250,
        storeMapping:[
                        {name:"Id",mapping:'id',type:'int'},
                        {name:"Name"},
                        {name:"Password"},
                        {name:"LastLoginTime"},
                        {name:"LoginTimes"},
                        {name:"Email"},
                        {name:"Re"}
                    ],   
        cm:new Ext.grid.ColumnModel(
            [       
                    {header: "用户名", sortable:true,width: 100, dataIndex:"Name",editor:new Ext.form.TextField()},
                    {header: "密码", sortable:true,width: 100, dataIndex:"Password",editor:new Ext.form.TextField()},
                    {header: "电子邮箱", sortable:true,width: 100, dataIndex:"Email",editor:new Ext.form.TextField()},
                    {header: "上次登录时间", sortable:true,width: 100, dataIndex:"LastLoginTime",editor:new Ext.form.TextField()},
                    {header: "登录次数", sortable:true,width: 100, dataIndex:"LoginTimes",editor:new Ext.form.TextField()},
                    {header: "备注", sortable:true,width: 100, dataIndex:"Re",editor:new Ext.form.TextField()}
            ])
    });
    //----------------------------------------------------测试
    window.onload=function()
    {
        Ext.get('btn_open').on('click',function(){
    if(win)
    win.show();
    else
        open_panel();
    });
    }var panel,win;
    open_panel=function()
    {
        panel=new CC();
        win=new Ext.Window({
    width:600,
    height:400,
    buttonAlign:"center",
    title:'查询',
    modal:true,
    //shadow:true,
    closeAction:"hide",
    items:[panel],
    buttons:[   
     {text:"关闭",handler:function(){win.hide();},scope:this}]   
    });
    win.show();
    }
      

  7.   

    因为Extjs的继承机制
    Ext.extend=function(this,o)
    {
      for(var i in o)
      {
        this[i]=o[i];
      }
    }
    他只能实现简单的属性继承,存在很多问题,比如内存释放问题,
    建议用这种继承方式
    AA=function()
    {
       this.creategrid=function()
      {
      };
      ...
    };
    BB=function()
    {
       ...
    };
    BB.prototype=new AA();CC=function()
    {
    };
    cc.prototype=new BB();
    //楼上这位兄弟的方法只是把panel和编辑框隐藏起来,并没有真正释放掉内存,如果是单个窗口时没问题,但是遇到复杂的界面就会出现很多问题
      

  8.   

    问题解决了,贴出来,希望对大家有用,再次感谢各位的帮忙
    ----------------------------------------------------//基类
    //------------------------------------------------------------------------------------------
    AA=function(){    
        this.createstore=function(){
                return new Ext.data.SimpleStore(
        {
        data:[['0','mxh','0'],['1','zmm','1'],['2','nn','1']],
        fields:this.storeMapping
        }
        );};                             
        this.storeMapping=[{name:'id'},{name:'name'},{name:'sex'}];
        this.cm=new Ext.grid.ColumnModel(
        [
            {header:'编号',dataIndex:'id',sortable:false,editor:new Ext.form.TextField()},//不可排序
        {header:'姓名',dataIndex:'name',sortable:true,editor:new Ext.form.TextField()},//可排序
        {header:'性别',dataIndex:'sex',sortable:true,editor:new Ext.form.TextField()}//
        ]
        );
        this.creategrid=function()//
                        {
                            return new Ext.grid.EditorGridPanel({
                                store: createstore(),
                                cm: this.cm,
                                layout:'fit',
                                width:300,
                                height:200,
                                title:'cs',
                                mode:false,
                                autoExpandColumn:2,//指定地第二列为自动拉伸列
                                clicksToEdit:1,//单击一次变为可编辑,默认为二次
                                loadMask:{Msg:'这个在加载数据...'}
                            })
                        };                    
    };
    //类BB
    BB=function()
    {
        this.createstore=function(){return new Ext.data.SimpleStore(
        {
        data:[['0','mxh','0'],['1','zmm','1']],
        fields:this.storeMapping
        }
        );};
        this.storeMapping=[{name:'id'},{name:'name'},{name:'sex'}];
        this.cm=new Ext.grid.ColumnModel(
        [
            {header:'编号',dataIndex:'id',sortable:false,editor:new Ext.form.TextField()},//不可排序
        {header:'姓名',dataIndex:'name',sortable:true,editor:new Ext.form.TextField()},//可排序
        {header:'性别',dataIndex:'sex',sortable:true,editor:new Ext.form.TextField()}//
        ]
        );
    };
    BB.prototype=new AA();//类CC
    CC=function()
    {
        this.createstore=function(){return new Ext.data.SimpleStore(
        {
        data:[['0','mxh','0']],
        fields:this.storeMapping
        }
        );};
    };
    CC.prototype=new BB();
    //----------------------------------------------------测试
    window.onload=function()
    {
        Ext.get('btn_open').on('click',function(){open_panel();});//btn_getdiv
    }open_panel=function()
    {
                        var bb=new BB();
                        var gridbb=bb.creategrid();
                        var win = new Ext.Window({
                        width:600,
                        height:400,
                        buttonAlign:"center",
                        title:'查询',
                        modal:false,
                        shadow:true,
                        autoDestroy:true,
                        closeAction:"close",
                        items:[gridbb],
                        buttons:[   
                         {text:"关闭",handler:function(){win.close();Ext.destroy(bb);},scope:this}]   
                        });
                    win.show();
    }
      

  9.   

    内存泄漏时整个ext体系的问题,很难通过简单的处理解决。不过还是很赞成13楼的做法,我也一直那样用。
    这好像是回复的第七个关于ext的帖子了,每次都是无满意结贴,以后不回答ext的帖子了,费力不少,还什么也
    捞不着