在我在Controller中的MVC应用程序中,我有以下功能来添加新的选项卡并将其集中到带有DataView的TabPanel:
show_gallery: function(view, record, item, index, e, opts) {
var tabb = Ext.ComponentQuery.query('.gallery_panel');
var gallery_view = Ext.widget('gallery_view');
var ImageStore = Ext.create('Gallery.store.Images');
ImageStore.load({url: 'myphoto/index.php/api/feed/json/' + record.data.uuid});
Ext.apply(gallery_view, {
title: record.data.name,
id: record.data.uuid,
closable:true,
store: ImageStore
});
if (tabb[0].down('#' + record.data.uuid)) {
console.log('Entered IF');
//tabb[0].setActiveTab(tabb[0].down('#' + record.data.uuid));
tabb[0].setActiveTab(record.data.uuid);
}else{
console.log('Entered ELSE');
tabb[0].add(gallery_view);
if (Ext.getCmp(record.data.uuid)) {
console.log('THERE IS SUCH UUID');
}
//tabb[0].setActiveTab(gallery_view);
}
},
问题出在最后一行。当我取消注释tabb [0] .setActiveTab(gallery_view)时,新选项卡会聚焦但是为空,如果我将该行留下注释,则带有dataView的新选项卡将填充数据但不会聚焦。我真的不知道为什么setActiveTab()导致DataView根本不显示。 gallery_view小部件是Ext.view.View扩展。
答案 0 :(得分:1)
如果没有setActiveTab,我不确定如何获取数据视图,但此代码似乎存在问题:
var gallery_view = Ext.widget('gallery_view');
var ImageStore = Ext.create('Gallery.store.Images');
ImageStore.load({url: 'myphoto/index.php/api/feed/json/' + record.data.uuid});
Ext.apply(gallery_view, {
title: record.data.name,
id: record.data.uuid,
closable:true,
store: ImageStore
});
首先使用Ext.widget()创建一个新的窗口小部件,然后使用Ext.apply()覆盖一些配置选项。根据我的理解,后者适用于基元,但不适用于对象/数组。
一般来说,配置是为了告诉构造函数如何初始化类的特定实例。如果对象尚未呈现,则可以通过Ext.apply()更改对象的标题,但不能更改商店配置(构建时组件可能会开始收听各种商店事件,这会赢得&# 39; t发生在一个简单的Ext.apply()中,它只复制从一个对象到另一个对象的配置 - 你已经错过了火车上创建的组件,只要听到商店事件就可以了。)
请改为尝试:
var ImageStore = Ext.create('Gallery.store.Images');
ImageStore.load({url: 'myphoto/index.php/api/feed/json/' + record.data.uuid});
var gallery_view = Ext.widget('gallery_view', {
title: record.data.name,
id: record.data.uuid,
closable:true,
store: ImageStore
});