哪位大侠帮我看看这段程序:从主程序进入本窗口调用这段程序,第一次能打开下拉树(this.typemctTextField)表现正常,关掉窗口,
从主程序重新打开本窗口就打不开下拉树了。可firebug中关于下拉树的数据从后台传前台正常
(loader: new   Ext.tree.TreeLoader({dataUrl:'tree.myaction?method=lbTreeLb2&pid='+getSbpid(mySbpartid)}))。哪位给个诊断?
function getSbpid(id){
return "a"+id;
}
var chiForm
var StudentFormPanel = function() {/**$$$$$ */
chiForm=this;
this.typeidTextField = {
 xtype : 'hidden',
//xtype : 'textfield',
//width : Height1,
fieldLabel : "所属分类序号",
labelAlign :'right' ,
readOnly : true,
//editable : true,
name : "typeid"
};
var mycombotree;
this.typemctTextField = {
            xtype: 'combo',
fieldLabel: '类别名称',//所属分类名称'
            name: 'typemct',
     store:  new Ext.data.SimpleStore({fields:[],data:[[]]}), 
           mode:  'local',
resizable:true,
           height:500,
           //width : Height1,
autoScroll:false,
triggerAction:'all', 
tpl: '<tpl for="."><div id="tree1"></div></tpl>',
displayField: 'key',
valueField: 'value',
listeners:{
             expand:function(combo ){
mycombotree=this;
  tree.render('tree1');
  tree.root.expand();
             }
},
editable : false,
emptyText: '请选择...',
hiddenName:'typemc'
};
    tree = new Ext.tree.TreePanel({  
     //el:'tree-div',  
     height:600,
 //autoHeight:true,  
     autoWidth:true,
     loader: new   Ext.tree.TreeLoader({dataUrl:'tree.myaction?method=lbTreeLb2&pid='+getSbpid(mySbpartid)})
    });
    var root=new Array();
     root = new Ext.tree.AsyncTreeNode({  
        //text: setTform.getForm().findField('sbpartid').getRawValue(),
        text: mySbpartmc,
        draggable:false,  
       id:getSbpid(mySbpartid)  
   });  
   tree.setRootNode(root);  
   //根据点击的节点加载该节点下的数据,点击哪个节点就加载哪个节点的数据  
   tree.on('beforeload',function(node){ 
       if(node.id != getSbpid(mySbpartid)){    
           tree.loader.dataUrl = 'tree.myaction?method=lbTreeLb2&pid='+node.id;           
       }      
   });  
//监听下拉树的节点单击事件
tree.on('click', function(node){ 
if(node.leaf==true){
//var _form=chiForm.getForm();
chiForm.getForm().findField('typeid').setValue(node.id);
mycombotree.setRawValue(node.text);
//mycombotree.setRawValue(node.id); 
mycombotree.collapse();
}
}); 
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.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
});
}
});
}
});

解决方案 »

  1.   

    这段程序写的没什么问题
    1、 但是mySbpartid这个变量在哪定义的?
    2、tpl: '<tpl for="."><div id="tree1"></div></tpl>',
      去掉标红的
    3、最好晒下你在主接口调用该段代码的地方的代码?
      

  2.   

    那有个combobox的expand事件 会渲染到那个tpl上的 按理说没什么问题
      

  3.   

    回复1楼 明面的变量没问题 因为servelet从后台取的树的内容都正常,只是打开窗口关闭再打开树就不正常了(但firebug显示的servlet所取树的内容正确)
      

  4.   

    本模块完整代码
    Morik.Office.GzxxglPanel= function(config) {
    Morik.Office.GzxxglPanel.superclass.constructor.call(this, config);
    var thisServlet="gzxx.myaction";
    var pagesize=10;
    var stuwinTitle='故障信息管理';
    var masGrid;
    var mySbpartid=Morik.Office.sbpartid;
    var mySbpartmc=Morik.Office.sbpartmc;
    function getSbpid(id){
    return "a"+id;
    }
    var chiForm
    var StudentFormPanel = function() {/**$$$$$ */
    chiForm=this;
    this.idTextField = {
    // xtype : 'hidden',
    xtype : 'textfield',
    fieldLabel : "序号",
    readOnly : 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',
    //xtype : 'textfield',
    //width : Height1,
    fieldLabel : "所属分类序号",
    labelAlign :'right' ,
    readOnly : true,
    //editable : true,
    name : "typeid"
    };
    var mycombotree;
    this.typemctTextField = {
                xtype: 'combo',
    fieldLabel: '类别名称',//所属分类名称'
                name: 'typemct',
         store:  new Ext.data.SimpleStore({fields:[],data:[[]]}), 
               mode:  'local',
    resizable:true,
               height:500,
               //width : Height1,
    autoScroll:false,
    triggerAction:'all', 
    tpl: '<tpl for="."><div id="tree1"></div></tpl>',
    displayField: 'key',
    valueField: 'value',
    listeners:{
                 expand:function(combo ){
    mycombotree=this;
      tree.render('tree1');
      tree.root.expand();
                 }
    },
    editable : false,
    emptyText: '请选择...',
    hiddenName:'typemc'
    };
        tree = new Ext.tree.TreePanel({  
         //el:'tree-div',  
         height:600,
     //autoHeight:true,  
         autoWidth:true,
         loader: new   Ext.tree.TreeLoader({dataUrl:'tree.myaction?method=lbTreeLb2&pid='+getSbpid(mySbpartid)})
        });
        var root=new Array();
         root = new Ext.tree.AsyncTreeNode({  
            //text: setTform.getForm().findField('sbpartid').getRawValue(),
            text: mySbpartmc,
            draggable:false,  
           id:getSbpid(mySbpartid)  
       });  
       tree.setRootNode(root);  
       //根据点击的节点加载该节点下的数据,点击哪个节点就加载哪个节点的数据  
       tree.on('beforeload',function(node){ 
           if(node.id != getSbpid(mySbpartid)){    
               tree.loader.dataUrl = 'tree.myaction?method=lbTreeLb2&pid='+node.id;           
           }      
       });  
    //监听下拉树的节点单击事件
    tree.on('click', function(node){ 
    if(node.leaf==true){
    //var _form=chiForm.getForm();
    chiForm.getForm().findField('typeid').setValue(node.id);
    mycombotree.setRawValue(node.text);
    //mycombotree.setRawValue(node.id); 
    mycombotree.collapse();
    }
    }); 
    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);
    }
    });
    Ext.extend(Morik.Office.GzxxglPanel, Ext.Panel, {});/**$$$$$ */
      

  5.   


    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 : 'student/doGetStudentList.action'
    // url : 'sbpart.myaction?method=list'
    url : thisServlet + '?method=list'
    }), // set up the JsonReader
    reader : new Ext.data.JsonReader( {
    root : 'list',
    totalProperty : 'totalSize',
    id : 'id'
    }, recordType)
    });
    this.store.load({params:{start:0,limit:pagesize}});
    // this.store.load();
    //masGrid.store.load({params:{start:0,limit:pagesize,sbpartid:mySbpartid}});
    var sm = new Ext.grid.CheckboxSelectionModel( {
    singleSelect : false
    });
    /* function sbpart(v) {
         for(i=0,Count=dsGzsslb.getCount();i<Count;i++)
         if(v==dsGzsslb.getAt(i).get('value'))  return dsGzsslb.getAt(i).get('text');
         //if(v==dsGzsslb.getAt(i).get('value'))  return '<span style="color:green;">' +dsGzsslb.getAt(i).get('text')+'</span>';
        }
    */
    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();
    _form.loadRecord(_win.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());
    }