0

iframe のソースを動的に更新する必要があります。また、リンクが更新されると、iframe が自動的にリロードされます。Google は実用的なソリューションを提供してくれません。現在、非アクティブな場合は親パネルから iframe を削除し、タブがアクティブな場合はもう一度追加しようとしています。

var myIFrame = new Ext.BoxComponent({
 autoEl:{
    id:'myIFramePanel',
    tag:'iframe',
    border:false,
    src:'myConfiguration/getMyConfigurationPage'
 }
});

myConfigurationPanel = Ext.extend(Ext.Panel, {
id:'myConfigurationPanel',
layout:'fit',
frame:true,
defaults:{autoScroll:true},

listeners:{
    deactivate:function (panel) {
        console.info('-------DEACTIVATE TAB');
        panel.removeAll();
    },
    activate:function (panel) {
        console.info('-------ACTIVATE TAB');
        panel.add(myIFrame);
        var myIFramePanel = document.getElementById('myIFramePanel'); // always null
        if (myIFramePanel) {
            var updater = Ext.get(myIFramePanel).getUpdateManager();
            updater.update('newLink');
        }
    }
},

initComponent:function () {
    myConfigurationPanel.superclass.initComponent.apply(this, arguments);
 }
});
4

1 に答える 1

0

srciframeのプロパティを変更するだけで更新されます。

BoxComponentさらに、 iframe が DOM で使用できるようにレンダリングされるまで待つ必要があります。getElementByIdその後、または同等の方法でアクセスできます。

あなたがすべきことは、すでにレンダリングされている場合は iframe src を変更するメソッドを追加するか、srcまだレンダリングされていない場合は要素の を変更することです。このようにして、必要なときにいつでもこのメソッドを呼び出すことができます。

var myIFrame = new Ext.BoxComponent({
    autoEl:{
        id:'myIFramePanel',
        tag:'iframe',
        border:false,
        src:'myConfiguration/getMyConfigurationPage'
    }

    ,setSrc: function(src) {
        if (this.rendered) {
            // equivalent to:
            // document.getElementById('myIFramePanel').src = src;
            Ext.get('myIFramePanel').set({
                src: src
            });
        } else {
            this.autoEl.src = src;
        }
    }
});

じゃあ後で:

// will always work
myIFrame.setSrc(...);
于 2013-08-30T13:23:04.317 に答える