0

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拡張子です。

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 に答える