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个回答

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(...)即可

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!