在这里,我正在注册我的应用程序:
App = new Ext.Application({
name: "App",
launch: function() {
this.views.viewport = new this.views.Viewport();
}
});
这是我注册新面板和组件的方式。我把它们分别放在单独的js文件中。
App.views.Viewport = Ext.extend(Ext.TabPanel, {
fullscreen: true,
tabBar: {
dock: 'bottom',
layout: {
pack: 'center'
}
},
items: [
{
xtype: 'cPanel'
},
{
xtype: 'anotherPanel'
}
]
});
// register this new extended type
Ext.reg('App.views.viewport', App.views.Viewport);
我以同样的方式添加了其他组件。
在我的组件列表视图中,我想在项目上点击时更改容器面板的activeItem与另一个面板,如下所示:(视口包含此容器面板)
App.views.ListApp = Ext.extend(Ext.List, {
store: App.store,
itemTpl: "...",
onItemDisclosure: function(record) {
App.detailPanel.update(record.data);
App.cPanel.setActiveItem("detailPanel");
},
listeners: {
itemtap: function(view, index, item, e) {
var rec = view.getStore().getAt(index);
App.views.detailPanel.update(rec.data);
App.views.cPanel.setActiveItem("detailPanel", {type:"slide", direction: "left"});
}
}
});
App.views.detailPanel.update(rec.data);
但是它说:无法调用未定义的方法“更新”
我尝试了不同的变体,例如: App.detailPanel.update(rec.data); 我试图提供 detailPanel 和 cPanel ID,将它们添加到容器面板中,并尝试使用Ext.get()与它们联系,但这些都不起作用
这里有什么问题?
任何其他建议将不胜感激。 感谢。
答案 0 :(得分:2)
懒惰的方式:给出面板ID并使用:
Ext.getCmp(id)
推荐方法:将itemId分配给面板并使用:
App.views.viewport.getComponent(itemId)
这将允许您在aby给定时间拥有同一组件的多个实例,第一个示例无效,因为您在DOM树中只能有一个单数id。
此外,getComponent仅适用于存储在items集合中的组件。