我找了没有全局变量,也没有重复id(不过关于gridpanel里边的id拿不准) 请指教
Morik.Office.GzxxglPanel= function(config) {
Morik.Office.GzxxglPanel.superclass.constructor.call(this, config);
//Morik.Office.GzxxglPanel.superclass.constructor.call(this,{id:"gzxxGl",title:"故障信息管理",closable:false,closeAction:'hide' });
var thisServlet="gzxx.myaction";
var pagesize=10;
var stuwinTitle='故障信息管理';
var masGrid;
var mySbpartid=Morik.Office.sbpartid;
var mySbpartmc=Morik.Office.sbpartmc;
var treeXh="g";
function getSbpid(id){
return treeXh+"a"+id;
}
var StudentFormPanel = function() {/**$$$$$ */
var chiForm=this;
this.idTextField = {
// xtype : 'hidden',
xtype : 'textfield',
fieldLabel : "序号",
readOnly : true,
hidden:true,
hideLabel:true,
name : "id"
};
this.nameTextField = {
xtype : 'textfield',
fieldLabel : "故障名",
allowBlank : false,
maxLength:20,
minLength:1,
name : "name"
};
this.faulttimeTextField = {
xtype : 'numberfield',
fieldLabel : "所需时间",
allowBlank : false,
name : "faulttime"
};
this.faultscoreTextField = {
xtype : 'numberfield',
fieldLabel : "绩分",
allowBlank : false,
name : "faultscore"
};
this.typeidTextField = {
 xtype : 'hidden',
fieldLabel : "所属分类序号",
labelAlign :'right' ,
readOnly : true,
name : "typeid"
};
this.typemctTextField = {
            xtype: 'combo',
fieldLabel: '类别名称',//所属分类名称'
            name: 'typemct',
     store:  new Ext.data.SimpleStore({fields:[],data:[[]]}), 
           mode:  'local',
resizable:true,
           height:500,
            allowBlank : false,
autoScroll:false,
triggerAction:'all', 
tpl: '<tpl for="."><div id="treeg"></div></tpl>',
displayField: 'key',
valueField: 'value',
listeners:{
             expand:function(combo ){
var mycombotree=this;
    this.tree = new Ext.tree.TreePanel({  
     height:600,
     autoWidth:true,
     loader: new   Ext.tree.TreeLoader({dataUrl:'tree.myaction?method=lbTreeLb2&txh='+treeXh+'&pid='+getSbpid(mySbpartid)})
    });
    this.root = new Ext.tree.AsyncTreeNode({  
        text: mySbpartmc,
        draggable:false,  
       id:getSbpid(mySbpartid)  
   });  
   this.tree.setRootNode(mycombotree.root);  
   //根据点击的节点加载该节点下的数据,点击哪个节点就加载哪个节点的数据  
   this.tree.on('beforeload',function(node){ 
       if(node.id != getSbpid(mySbpartid)){    
           mycombotree.tree.loader.dataUrl = 'tree.myaction?method=lbTreeLb2&txh='+treeXh+'&pid='+node.id;           
       }      
   });  
//监听下拉树的节点单击事件
this.tree.on('click', function(node){ 
if(node.leaf==true){
chiForm.getForm().findField('typeid').setValue(node.id);
mycombotree.setRawValue(node.text);
mycombotree.collapse();
}
}); 

  this.tree.render('treeg');
  this.tree.root.expand();
             }
},
editable : false,
emptyText: '请选择...',
hiddenName:'typemc'
};
StudentFormPanel.superclass.constructor.call(this, {
bodyStyle : 'padding:5px 5px 0',
frame : true,
reader : new Ext.data.JsonReader( {
root : 'list',
successProperty : 'success',
totalProperty : 'totalSize',
id : 'id'
}, ['id', 'name', 'faulttime', 'faultscore', 'typeid','typemc']),/**$$$$$ */
items : [this.idTextField, this.nameTextField, this.faulttimeTextField, this.faultscoreTextField, this.typeidTextField, this.typemctTextField]
});
}
Ext.extend(StudentFormPanel, Ext.form.FormPanel, {
loadData : function(id) {
var url = thisServlet + '?method=edit&id=' + id;/**$$$$$ */
this.getForm().load( {
url : url,
waitMsg : 'Loading',
failure : function(form, action) {
var json = action.response.responseText;
var o = eval("(" + json + ")");
Ext.MessageBox.show( {
title : 'Error',
msg : o.message,
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.ERROR
});
}
});
}
});var StudentWindow = function() {
var _win = this;
this.formPanel = new StudentFormPanel();
var _form = this.formPanel.getForm();
StudentWindow.superclass.constructor.call(this, {
title : stuwinTitle,
width : 520,
height : 300,
resizable : true,
plain : false,
border : false,
modal : true,
autoScroll : true,
layout : 'fit',
closeAction : 'hide',
items : this.formPanel,
buttons : [ {
text : '保存',
handler : function() { _form.errorReader = new Ext.data.JsonReader( {
successProperty : 'success',
root : 'list',
id : 'id'
}, ['id', 'name', 'faulttime', 'faultscore', 'typeid','typemc']);/**$$$$$ */ if (_form.isValid()) {
_form.submit( {
waitMsg : 'wait...',
url : thisServlet + '?method=save&lbTree=t',
failure : function(form, action) {
var json = action.response.responseText;
var o = eval("(" + json + ")");
Ext.MessageBox.show( {
title : 'Error',
msg : o.message,
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.ERROR
});
},
success : function(form1, action) {
var data = action.result.errors[0];
if (_win.record) {
_win.record.data = data;
_win.record.reject();
_win.hide();
} else {
_win.record = new Ext.data.Record(data)
}
_form.loadRecord(_win.record);
}

});
}
}
}, {
text : '关闭',
handler : function() {
_win.hide();
},
tooltip : 'Close the window'
}]
});
}
Ext.extend(StudentWindow, Ext.Window, {
loadData : function(id) {
this.formPanel.loadData(id);
}
});

解决方案 »

  1.   

    var StudentGridPanel = function() {
    var stuWindow = new StudentWindow();
    var _grid = this;
    masGrid=this;
    var recordType = Ext.data.Record.create([ {/**$$$$$ */
    name : 'id',
    type : 'int',
    mapping : 'id'
    }, {
    name : 'name',
    type : 'string',
    mapping : 'name'
    }, {
    name : 'faulttime',
    type : 'float',
    mapping : 'faulttime'
    }, {
    name : 'faultscore',
    type : 'float',
    mapping : 'faultscore'
    }, {
    name : 'typeid',
    type : 'int',
    mapping : 'typeid'
    },{name : 'typemc',
    type : 'string',
    mapping : 'typemc'
    }]);
    this.store = new Ext.data.Store( {
    proxy : new Ext.data.HttpProxy( {
    url : thisServlet + '?method=list'
    }), reader : new Ext.data.JsonReader( {
    root : 'list',
    totalProperty : 'totalSize',
    id : 'id'
    }, recordType)
    });
    this.store.load({params:{start:0,limit:pagesize}});
    var sm = new Ext.grid.CheckboxSelectionModel( {
    singleSelect : false
    });
    this.columns = [new Ext.grid.RowNumberer(), {/**$$$$$ */
    id : 'id',
    header : "序号",
    width : 20,
    sortable : true,
    dataIndex : 'id'
    }, {
    header : "故障名",
    width : 75,
    sortable : true,
    dataIndex : 'name'
    }, {
    header : "所需时间",
    width : 50,
    sortable : true,
    dataIndex : 'faulttime'
    }, {
    header : "绩分",
    width : 50,
    sortable : true,
    dataIndex : 'faultscore'
    }, {
    header : "类别序号",//所属类别序号
    width : 30,
    dataIndex : 'typeid',hideable:false,sortable:false,resizable:true,hidden:false
    },{header : "类别名称",//所属类别名称
    width : 75,
    sortable : true,
    dataIndex : 'typemc'
    }, sm]; var deleteFormDiv = Ext.DomHelper.insertHtml('afterEnd', document.body,
    '<div id="' + Ext.id() + '" style="visibility: hidden;"> </div>'); var deleteForm = new Ext.form.FormPanel( {
    items : {}
    }); deleteForm.render(deleteFormDiv);
    deleteForm.getForm().errorReader = new Ext.data.JsonReader( {
    successProperty : 'success'
    }, ['id', 'name', 'faulttime', 'faultscore', 'typeid','typemc']);/**$$$$$ */
    StudentGridPanel.superclass.constructor
    .call(
    this,
    {
    layout : 'fit',
    sm : sm,
            loadMask:true,      //读取数据时的遮罩和提示功能,默认为false  
    viewConfig : {
      emptyText : "sorry,没有数据",
               forceFit : true,
                enableRowBody : true,
                getRowClass :function(record, rowIndex, p, ds) {
                    var cls = 'white-row';
    var colorI=rowIndex%3;
                    switch (colorI) {
                        case 0 :
                            cls = 'yellow-row'
                            break;
                        case 1 :
                            cls = 'green-row'
                            break;
                        case 2 :
                            cls = 'red-row'
                            break;
                    }
                    return cls;
                }
            },
    bbar : new Ext.PagingToolbar( {
    pageSize : pagesize,
    store : this.store,
                beforePageText:"第",  
                afterPageText:"页,共{0}页",  
                lastText:"尾页",  
                nextText :"下一页",  
                prevText :"上一页",  
                firstText :"首页",  
                refreshText:"刷新页面",  
                displayInfo: true,  
                displayMsg:"当前显示 {0} - {1}条, 共 {2}条",                       
                emptyMsg: "没有记录"          
    }),
    tbar : [
    {
    text : '增加',
    icon:'pic/sizeplus.gif',
    handler : function() {
    var data = {};
    var record = new Ext.data.Record(data);
    _grid.store.insert(0, record);
    stuWindow.record = record;
    stuWindow.formPanel.getForm().reset();
    stuWindow.show();
    stuWindow.formPanel.getForm().loadRecord(record);
    }
    },
    '-',
    {
    text : '删除',
    icon:'pic/sizeminus.gif',
    handler : function() {
    var records = _grid.getSelections();
    if (records) {
    Ext.MessageBox
    .confirm(
    '确认',
    '确定要删除所选记录?',
    function(btn) {
    if (btn == 'yes') {
    var ids = "";
    for (var i = 0; i < records.length; i++) {
    var record = records[i];
    if (record.data.id) {
    ids += record.data.id+ ',';
    } else {
    _grid.store
    .remove(record);
    }
    }
    deleteForm
    .getForm()
    .submit( {
    waitMsg : 'wait...',
    url : thisServlet + '?method=delete&ids='+ids,
    failure : function(
    form,
    action) {
    var json = action.response.responseText;
    var o = eval("("
    + json
    + ")");
    Ext.MessageBox
    .show( {
    title : 'Error',
    msg : o.message,
    buttons : Ext.MessageBox.OK,
    icon : Ext.MessageBox.ERROR
    });
    },
    success : function(
    form1,
    action) {
    _grid.store.load({params:{start:0,limit:pagesize}});
    // _grid.store
    // .load();
    }
    });
    }
    });
    }
    }
    }, '-', {
    text : '修改',
    icon:'pic/redo.gif',
    handler : function() {
    var record = _grid.getSelected();
    if (record != null) {
    stuWindow.show();
    var record = _grid.getSelected();
    stuWindow.record = record;
    stuWindow.formPanel.getForm().loadRecord(record);
     }
    }
    }]
    });
    }Ext.extend(StudentGridPanel, Ext.grid.GridPanel, {
    // width : 660,
    height : 310,
    //         stripeRows : true, //True表示使用不同颜色间隔行,默认为false.   
    //         loadMask:true,      //读取数据时的遮罩和提示功能,默认为false   getSelected : function() {
    var record = this.getSelectionModel().getSelected();
    if (record == null) {
    Ext.MessageBox.show( {
    title : '提示',
    msg : "请选择记录",
    buttons : Ext.MessageBox.OK,
    icon : Ext.MessageBox.INFO
    });
    } else {
    return record;
    }
    },
    getSelections : function() {
    var records = this.getSelectionModel().getSelections();
    if (records.length < 1) {
    Ext.MessageBox.show( {
    title : '提示',
    msg : "请选择记录",
    buttons : Ext.MessageBox.OK,
    icon : Ext.MessageBox.INFO
    });
    } else {
    return records
    }
    }
    });
    // this.add( setTform);
    this.add(new StudentGridPanel());

    }Ext.extend(Morik.Office.GzxxglPanel, Ext.Panel, {});/**$$$$$ */
      

  2.   

    代码好长啊 问题应该出现在这里 再次加载 应该重新渲染~~~
    expand : function(combo)
    {
    var mycombotree = this;
    this.tree = new Ext.tree.TreePanel({
    height : 600,
    autoWidth : true,
    loader : new Ext.tree.TreeLoader({
    dataUrl : 'tree.myaction?method=lbTreeLb2&txh='
    + treeXh + '&pid=' + getSbpid(mySbpartid)
    })
    });
    this.root = new Ext.tree.AsyncTreeNode({
    text : mySbpartmc,
    draggable : false,
    id : getSbpid(mySbpartid)
    });
    this.tree.setRootNode(mycombotree.root);
    // 根据点击的节点加载该节点下的数据,点击哪个节点就加载哪个节点的数据
    this.tree.on('beforeload', function(node)
    {
    if (node.id != getSbpid(mySbpartid))
    {
    mycombotree.tree.loader.dataUrl = 'tree.myaction?method=lbTreeLb2&txh='
    + treeXh + '&pid=' + node.id;
    }
    });
    // 监听下拉树的节点单击事件
    this.tree.on('click', function(node)
    {
    if (node.leaf == true)
    {
    chiForm.getForm().findField('typeid')
    .setValue(node.id);
    mycombotree.setRawValue(node.text);
    mycombotree.collapse();
    }
    }); this.tree.render('treeg');
    this.tree.root.expand();
    }
      

  3.   

    我试了下:
    一、grid加个事件销毁grid前先销毁弹出窗体
    二、把树的定义到移到下拉框外边。