weixin_42349640 2009-11-25 17:47
浏览 293
已采纳

Ext.grid.GridPanel重用的问题

创建了一个grid,希望能够在两个不同的地方重用,第一个地方是放在content-panel,第二个地是放在window中,代码如下:
[code="js"]
//创建grid
var grid1 = new Ext.grid.GridPanel({
id: 'grid1',
store: store1,
tbar: [
'搜索: ', ' ',
new Ext.app.SearchField({
width:240,
store: store1,
paramName: 'q'
})
],
columns: [
{header: "id", width: 120, hidden: true, dataIndex: 'id'},
{header: "业务系统名称", width: 120, sortable: true, dataIndex: 'systemName'},
{header: "业务功能编号", width: 120, sortable: true, dataIndex: 'functionID'},
{header: "业务功能名称", width: 120, sortable: true, dataIndex: 'functionName'}
],
sm: new Ext.grid.RowSelectionModel({
singleSelect: true,
listeners: {
rowselect: function(sm, row, rec) {
//action
}
}
}),
stripeRows: true,
height:350,
width:600,
// paging bar on the bottom
bbar: new Ext.PagingToolbar({
pageSize: 25,
store: store1,
displayInfo: true,
displayMsg: 'Displaying records {0} - {1} of {2}',
emptyMsg: "No records to display"
})
});

//在content-panel中显示grid1
Ext.getCmp('content-panel').add(grid1);
Ext.getCmp('content-panel').layout.setActiveItem('grid1');
grid1.store.load();

//在window中显示grid1
function showGrid1Window() {
if(!win){
win = new Ext.Window({
layout:'fit',
width:700,
closeAction:'hide',
plain: true,
items: grid1,

        buttons: [{
            text: 'Close',
            handler: function(){
                win.hide();
            }
        }]
    });
}
grid1.store.reload();
//grid1.show();
win.show();

}
[/code]
现在遇到了两个问题:
1、在content-panel中显示grid1后显示别的内容,grid1变为隐藏,这时再调用在window中显示grid1,grid1就无法显示,即使调用grid1.show()也没有用,怎么解决?
2、我希望能够在两个地方rowselect时有不同的处理,如何能够做到?即使我用最笨的办法,用同样的代码生成一个grid2,两个共用store1,只是rowselect中的处理不一样,但只要调用过一次grid1,那么grid2的rowselect也会变成跟grid1一样,不知是什么原因?
[b]问题补充:[/b]
能解释一下为什么吗?
代码有这样一句:Ext.getCmp('content-panel').layout.setActiveItem('grid1');,去掉后会报错的
[b]问题补充:[/b]
第一个问题明白了,非常感谢
我刚才用了两个grid试了一下,发现第二个问题描述的不准确。操作是这样的:
显示grid1 -> 选择某一行(触发rowselect) -> 显示另外一个组件(隐藏grid1) -> 在window中显示grid2。
这时出现一个问题,grid1的rowselect自动被触发了,而且就是我刚才选的那行。两个grid的sm是分别定义的,请问是怎么回事?
[b]问题补充:[/b]
找到原因了,是因为共用了store,只要一reload就会触发grid1上次的rowselect,但实在想不明白,谁能解释一下?

  • 写回答

3条回答 默认 最新

  • CaiHuajiang 2009-11-25 18:33
    关注

    原因是这个是用来显示的组件,是不能共用的,因为你只能用于生成放到一个地方的DOM。所以可以定义两个grid,共用store,共用cm,共用sm,但是还是需要两个grid。
    明白地说,grid最终所属的el,你总不至于有两个吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 利用pthon计算薄膜结构的光导纳
  • ¥15 海康hlss视频流怎么播放
  • ¥15 Paddleocr:out of memory error on GPU
  • ¥30 51单片机C语言数码管驱动单片机为AT89C52