iteye_913 2010-04-20 11:22
浏览 206
已采纳

ext点击grid数据加载树列表的问题

页面:

问题:页面布局是由center和south两部分组成,center是一个grid,south是有两个tab页组成,我得操作是点击上面表哥的一条记录,下面两个tab页信息进行加载,现在问题是基本信息可以加载,但是关联行业就不能加载,(其实我的目的就是想让这行业树reload一遍),但是会出错。

 

用firefox时错误提示:uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMHTMLDivElement.appendChild]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: http://localhost:8080/rxtc-bi-web/bip/tp/ext-3.1.0/ext-all.js :: anonymous :: line 7" data: no]

 

用IE8错误提示:类型不匹配,this.holder.appendChild(this.wrap)  

 

 

center代码:

  var reportIndustryQuery=new ReportIndustryQueryGrid();
  frQueryGrid=new Ext.grid.GridPanel({
   store:emStore,
   height:400,
   cm:cm,
   border:false,
   enableHdMenu : false,
   viewConfig:{forceFit:true},
   loadMask: true,
   selModel:new Ext.grid.CellSelectionModel(),//单元格选择
      sm: new Ext.grid.RowSelectionModel({
                singleSelect: false,
                listeners: {
                    rowselect: function(sm, row, rec) { 
                        Ext.getCmp("frInfo").getForm().loadRecord(rec);  
                        reportIndustryQuery.loadTreeData(rec.get("frTradeTyp"));
                    }
                }
            }),
      tbar: getParamGridToolBar(),
      bbar: getPagingToolbar(emStore)
   
  });

 

south代码:

var ReportIndustryQueryGrid = function(){
 
 //GRID每页显示记录数
 var pageSize = 10;
 //当前选择的
 var frTradeTyp;
 //@private
 //列树对象
 var tradeTree;
 var imagePath ='../../bip/images/ext2';
 
 //@private
 //初始化并取到行业树
 var getTradeTree = function(){
   tradeTree = new Ext.tree.TreePanel({
     id:'reprotType_tradeTree',
     border:false,
     useArrows:true,
          autoScroll:true,
          animate:false,
          enableDD:false,
          checked: false,//显示复选框
          onlyLeafCheckable: false,//所有节点可选 
          rootVisible: true,
          checkModel:'cascade',
          loader : new Ext.tree.DWRTreeLoader({
          dwrCall:frReportTradeTypeBB.getTradeTree,  
          baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI  }
          }),
          root: new Ext.tree.AsyncTreeNode({
           text: '行业根节点',
           draggable:false,           
           id:'00000',
           queryParam:{},
           expanded:false
          }),
          tbar:[{text:'保存',handler:addTradeFun,tooltip:'保存行业',icon:imagePath+'/default/shared/save.gif',cls:'x-btn-text-icon'},
                {text:'刷新',handler:refreshFun,tooltip:'刷新行业',icon:imagePath+'/default/shared/save.gif',cls:'x-btn-text-icon'},
                '->'],
          listeners: {
      beforeload : function(node){
       frTradeTyp=Ext.getCmp("frTradeTyp").getValue();
       node.attributes.queryParam={frTradeTyp:frTradeTyp};
 
     },
              checkchange : function(node, checked){
                  if(checked){
                      node.getUI().addClass('complete');
                  }else{
                      node.getUI().removeClass('complete');
                  }
              }
          }
   });
 };
 //@private
 //对模板树或参数树进行查找
 var refreshFun = function(){
  var typeId=Ext.getCmp("frTradeTyp").getValue();
  tradeTree.getRootNode().reload();
 }


 //@private
 //初始化模板参数表格对象
 var init = function(){
  getTradeTree();
 }();

 return{
    //@public
    getTradeTree : function(){
   return tradeTree;
    }
    ,setFrTradeTypFun : function(selectId){     
   frTradeTyp=selectId;
   frTradeTyp=Ext.getCmp("frTradeTyp").getValue();
  }
  /**
   * 加载报表行业类别的行业
   * @param selectId 行业类型编号
   */
  ,loadTreeData: function(selectId){
   tradeTree.getRootNode().reload();
    }
 } ;
};

 

 

当我点击south里面的树面板上有一个按钮“刷新”可以进行重新加载,但是通过点击center上面记录调用loadTreeData方法就不能刷新,为什么?

 

 

  • 写回答

1条回答

  • chem_zqm 2010-04-20 14:36
    关注

    var reportIndustryQuery=new ReportIndustryQueryGrid();
    这个地方你新建了一个对象,它里面的树组件不是你在tabpanel里面的树
    所以你调用它的方法找到的根本找不到你在tabpanel里面的树;
    合理的做法应该是让ReportIndustryQueryGrid函数做成单例(也就是定义时执行),使用如下方式定义:
    [code="js"]
    var ReportIndustryQueryGrid = function(){
    //中间省略
    return {
    //@public
    getTradeTree: function(){
    return tradeTree;
    },
    setFrTradeTypFun: function(selectId){
    frTradeTyp = selectId;
    frTradeTyp = Ext.getCmp("frTradeTyp").getValue();
    } /**
    * 加载报表行业类别的行业
    * @param selectId 行业类型编号
    */
    ,
    loadTreeData: function(selectId){
    tradeTree.getRootNode().reload();
    }
    };
    }();
    [/code]
    使用时不用new直接 ReportIndustryQueryGrid .loadTreeData(...)即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算