我写了一个JieDanGrid类继承了GridPanel,这个JieDanGrid在两个地方用到(new了两次),当一个grid销毁时再操作另一个grid,FireBug出现this.grid.store is null 错误提示,弄了好长时间不知道怎么解决,还请高手指点
具体代码如下:
zyerp.order.JieDanGridPanel类/**
 * 接单列表
 * @class zyerp.order.JieDanGridPanel
 * @extends Ext.grid.GridPanel
 */
zyerp.order.JieDanGridPanel = Ext.extend(Ext.grid.GridPanel, {
title : "接单列表",
frame : true,
stripeRows : true,//显示行分隔符
viewConfig : {
autoScroll : true
},
height : 220,
columnLines : true,
collapsible  : true,
loadMask : true,//加载过程中有遮罩效果
selModel : new Ext.grid.RowSelectionModel({singleSelect:true}),//设置单行选中模式, 否则将无法删除数据
initComponent : function() {
var oThis = this;
if (!this.store) {
this.store = new Ext.data.JsonStore({
proxy : new Ext.data.HttpProxy({
url : "/zyerp/order/jieDanDengJi!loadJieDanDengJis",
method : "post",
params : {
limit : 10,
start : 0
}
}),
autoLoad : false,
root : "list",
totalProperty : "total",
fields : [
{name : "jieDanId", mapping : "jieDanId"},
{name : "keHuMingCheng", mapping : "keHuMingCheng"},
{name : "jieDanBianHao", mapping : "jieDanBianHao"},
{name : "keHuId", mapping : "keHuId"},
{name : "buMenId", mapping : "buMenId"},
{name : "zuBie", mapping : "zuBie"},
{name : "suoZaiGuoJia", mapping : "suoZaiGuoJia"},
{name : "jieDanShuLiang", mapping : "jieDanShuLiang"},
{name : "shiDanShuLiang", mapping : "shiDanShuLiang"},
{name : "chaEShuLiang", mapping : "chaEShuLiang"},
{name : "suoZaiGuoJia", mapping : "suoZaiGuoJia"},
{name : "shengChanNianYueStr", mapping : "shengChanNianYueStr", type : "date", dateFormat : "Y-m"},
{name : "xiaoShouLeiBie", mapping : "xiaoShouLeiBie"},
{name : "buMenMingCheng", mapping : "buMenMingCheng"},
{name : "jieDanJiaoQiStr", mapping : "jieDanJiaoQiStr", type : "date", dateFormat : "Y-m-d"},
{name : "jieDanBeiZhu", mapping : "jieDanBeiZhu"},
{name : "shuRuRen", mapping : "shuRuRen"},
{name : "shuRuRiQiStr", mapping : "shuRuRiQiStr", type : "date", dateFormat : "Y-m-d"},
{name : "suoDingZhuangTai", mapping : "suoDingZhuangTai"},
{name : "suoDingRiQiStr", mapping : "suoDingRiQiStr", type : "date", dateFormat : "Y-m-d"},
{name : "yeWuLeiBie", mapping : "yeWuLeiBie"}
]
});
}

if (!this.columns) {
this.columns = [
new Ext.grid.RowNumberer(),

header : "客户名称", 
width : 120, 
dataIndex : "keHuMingCheng",
align : "center"
}, {
header : "接单编号",
dataIndex : "jieDanBianHao",
align : "center"
}, {
header : "组别",
dataIndex : "zuBie",
align : "center"
}, {
header : "所在国家",
dataIndex : "suoZaiGuoJia",
align : "center"
}, {
header : "接单数量",
dataIndex : "jieDanShuLiang",
align : "center"
}, {
header : "实单数量",
dataIndex : "shiDanShuLiang",
align : "center"
}, {
header : "差额数量",
dataIndex : "chaEShuLiang",
align : "center"
}, {
header : "生产月份",
dataIndex : "shengChanNianYueStr",
align : "center",
renderer : Ext.util.Format.dateRenderer("Y-m")
}, {
header : "销售类别",
dataIndex : "xiaoShouLeiBie",
align : "center"
}, {
header : "接单部门",
dataIndex : "buMenMingCheng",
align : "center"
}, {
header : "接单交期",
dataIndex : "jieDanJiaoQiStr",
align : "center",
renderer : Ext.util.Format.dateRenderer("Y-m-d")
}, {
header : "接单备注",
dataIndex : "jieDanBeiZhu",
align : "center"
}, {
header : "输入人",
dataIndex : "shuRuRen",
align : "center"
}, {
header : "输入日期",
dataIndex : "shuRuRiQiStr",
align : "center",
renderer : Ext.util.Format.dateRenderer("Y-m-d")
}, {
header : "锁定状态",
dataIndex : "suoDingZhuangTai",
align : "center"
}, {
header : "锁定日期",
dataIndex : "suoDingRiQiStr",
align : "center",
renderer : Ext.util.Format.dateRenderer("Y-m-d")
}
]
}

this.on("afterrender", function() {
oThis.store.load();
})

zyerp.order.JieDanGridPanel.superclass.initComponent.call(this);
}
})zyerp.order.CopyChengPin = function(config) {
/*
 * 复制面料窗口
 */
var win = new Ext.Window({
title : "复制成品数据",
layout : "fit",
width : 800,
height : 600,
//modal : true,
items : [//一次用到zyerp.order.JieDanGridPanel tab_jieDan = new zyerp.order.JieDanGridPanel({
header : false,
bbar : [new Ext.Toolbar.Button({
text : "查询",
iconCls : 'button-find'
}), '-', {
iconCls: 'x-tbar-loading',
  handler:function(){
tab_jieDan.store.reload();
}
}]
})
]
})
Ext.apply(win, config);
return win;
}Windows入口:new Ext.Window({
title : "订单面料登记",
layout: "fit",
width : 400,
height : 600,
items : [//又一次用到zyerp.order.JieDanGridPanel
jieDan = new zyerp.order.JieDanGridPanel()
],
buttons : [{
text : "show",
handler : function() {
zyerp.order.CopyChengPin().show();
}
}]
}).show()

解决方案 »

  1.   


    var win = new Ext.Window({
            title : "复制成品数据",
            layout : "fit",
            width : 800,
            height : 600,
            closeAction : 'hide', //window 中都加上 closeAction : 'hide' 看看
      

  2.   

    给你的GridPanel 加上id标示试试 还有你关闭的时候怎么关闭的?
      

  3.   

    var oThis = this;
            if (!this.store) {
                this.store = new Ext.data.JsonStore({
                    proxy : new Ext.data.HttpProxy({
                        url : "/zyerp/order/jieDanDengJi!loadJieDanDengJis",
                        method : "post",
                        params : {
                            limit : 10,
                            start : 0
                        }
                    }),
    打印出this和oThis  看用哪个
      

  4.   


    在window 中都加上 closeAction : 'hide'是不报错,但是在复制成品window关闭后,订单面料登记window中的grid不能选中,这是什么原因呢?这两个grid是用的同一个Store吗
      

  5.   

    直接加firebug错误断点调试
    就是console那个tab,Clear按钮左边的那个按钮,点一下进入错误断点状态,一有错误就会断下,然后看call stack就能找到错误
      

  6.   

    楼主写的代码看得不是很懂,但是有几个问题我想说一下。
    1.在handler和listeners事件中应该多使用scope,类似 oThis=this 这种应该尽量避免。
    2.在继承component的生成自己定义ux组件时,应该注册xtype为好。
    3.在创建实例的时候可以用xxx=new XXX()这种形式,也可以用item:[{xtype:'XXXXX',....}]。
    4.个人认为如果是new两个实例应该各自有自己的store,并不冲突,楼主可以看看两个实例的id是否相同。以上拙见,未经代码测试。
      

  7.   

    我的问题解决了,去掉zyerp.order.JieDanGridPanel类是的 
    selModel : new Ext.grid.RowSelectionModel({singleSelect:true})
    就没问题了。可是这是什么原因呢,为什么会这样呢,不解?
      

  8.   

    使用HEEPwatch工具,看有没有发送请求,如果发送请求,看有没有数据,如果没有数据就是你请求数据源时,请求地址写错