这是我的应用程序的简要概述:
我有一个容器有 2 个区域的应用程序:
- 西 -> 树面板
- 中心 -> 具有“卡片”布局的容器,包含 0 个项目。
Whenever a treenode is selected, my controller will check a my-own custom property called 'node_viewId' to see whether its value is undefined or not.
如果未定义,它将创建一个“widget.myowngridpanel”实例(从“gridpanel”扩展)并为其分配一个唯一存储。之后,此实例将添加到“卡片”中,并将此实例作为活动项目,以便将其显示在中心区域。
为什么要这样设置?
每个节点代表需要在同一视图上显示的不同数据,并且需要保留视图的状态(例如,在节点 A - 用户对第一列进行排序并隐藏第二列,在节点 B - 用户对第三列进行排序并隐藏第一列柱子)。
我的实现:
我几乎让它工作了,但是在切换不同的活动项目时它并没有完全正确地显示视图。
这是我的控制器中的代码(例如,压缩版本):
this.control({
'#treePanelID' : {
itemclick : function(pThis, pRecord, pItem, pIndex, pE, pEOpts) {
var newCenterView,newCenterViewId,newGridStore;
if (pRecord.data.node_type === 'NodeA' &&
pRecord.data.node_viewId === undefined) {
newCenterView = Ext.create('widget.myowngridpanel',{
title:'GridPanel NodeA',
columns:[{ header: 'Node A item1', dataIndex: 'name'},
{header: 'Node A item2', dataIndex: 'phone'}]
});
newGridStore = Ext.create('NodeAStore');
newCenterViewId = 'nodeAID';
}
else
if (pRecord.data.node_type === 'NodeB' &&
pRecord.data.node_viewId === undefined) {
newCenterView = Ext.create('widget.myowngridpanel',{
title:'GridPanel NodeB',
columns:[{ header: 'Node B item1', dataIndex:
'address'},{header: 'Node B item2', dataIndex: 'city'},
{ header: 'Node B item3', dataIndex: 'zipcode'}]});
newGridStore = Ext.create('NodeBStore');
newCenterViewId = 'nodeBID';
}
if(newCenterView !== undefined &&
newCenterViewId !== undefined) {
pRecord.data.node_viewId = newCenterView.itemId = newCenterViewId;
this.getCenterCard().add(newCenterView);
newCenterView.bindStore(newGridStore);
}
this.getCenterCard().getLayout().setActiveItem(pRecord.data.node_viewId);
这是一个帮助您可视化问题的场景:
首先,用户选择“节点A”,进入“nodeAID”视图创建过程。您将看到它按预期显示:topBar 上的标题“GridPanel NodeA”和包含 1 个标题行的网格,该行由以下 2 列组成:“Node A item1”和“Node A item2”。
然后,用户选择“节点 B”,进入“nodeBID”视图创建过程。现在出现了视图问题,您将看到:topBar 的标题 'GridPanel NodeB' 和带有这 2 个标题行和以下列的网格:
1) 'Node B item1','Node B item2','Node B item3'
2) '节点 A item1','节点 A item2'
因此,由于某些原因,“NodeAID”视图中的先前标题列也存在于“NodeBID”视图中。到目前为止,我发现这个问题是由于通过别名(widget.myowngridpanel)创建视图而发生的。当使用“Ext.grid.panel”直接创建视图时,它可以完美运行。但我需要能够通过别名使其与视图创建一起使用。
如果我需要更清楚地描述我的描述,请告诉我。
帮助!
04/23 更新:
有一个关于“widget.myowngridpanel”的信息我没有放,因为我认为它与这个问题没有任何关系。'widget.myowngridpanel' 有由 2 个按钮组成的停靠项。当我删除它时,问题就消失了。这就是我拥有停靠项目的方式:
dockedItems: [{
xtype:'toolbar',
height:'29px',
dock:'top',
items:[{
xtype:'button',
text:'Button 1',
action:'button1pressed'
},{
xtype:'button',
text:'Button 2',
action:'button2pressed'
}]
}]
有任何想法吗?