在TabPanel中的ExtJS 4 DataView

时间:2012-06-11 19:25:54

标签: javascript extjs4

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

1 个答案:

答案 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
});