0

在 Controller 中的 MVC 应用程序中,我具有以下功能,可以将新选项卡添加并聚焦到 TabPanel,其中包含 DataView:

    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 扩展。

4

1 回答 1

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() 更改对象的标题可能会起作用,但不会更改存储配置(在构建时组件可能会开始侦听各种存储事件,这不会发生在简单的 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
});
于 2012-06-12T00:25:55.057 回答