创建了一个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,但实在想不明白,谁能解释一下?