按下输入 Extjs 时刷新标签面板内容

Posted

技术标签:

【中文标题】按下输入 Extjs 时刷新标签面板内容【英文标题】:refresh tabpanel contents on press of enter Extjs 【发布时间】:2018-01-26 18:11:44 【问题描述】:

我有一个由 3 个选项卡组成的选项卡面板。第三个选项卡显示外部供应商内容。我还有一个文本框和输入按钮。根据在文本框中输入的值,我需要刷新第三个选项卡的内容。

//second tab end, third tab starts
    id: 'test',
    title: "Test3",
    layout: "fit",
    html: iframebody,
    listeners: 
        'render': function()
            var e = document.getElementsByTagName("head")[0];
            var s = document.createElement("script");
            s.type = "text/javascript";
            s.src = msaJs;
            e.appendChild(s);
        ,
        'show': function(panel)
            //var tickerValue1 = Ext.getCmp('tabpanel').getActiveTab().html;
            theurl = 'http://example.com?ticker=' +ticker+';
            iframebody = '<iframe width=100% height=100% src='+theurl+'></iframe>';
            var tab1= Ext.getCmp('tabpanel').setActiveTab(2);
            alert(Ext.getCmp('tabpanel').getActiveTab().html);
            Ext.getCmp('tabpanel').getActiveTab().html=iframebody;
            alert(Ext.getCmp('tabpanel').getActiveTab().html);
            Ext.getCmp('tabpanel').getActiveTab().getUpdater().refresh();
    ,//show listener ended

现在,当我按下回车键时,即使警报消息显示标签的更新后的 html,标签也不会用新的代码刷新。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果您在iframe 中使用相同的来源,那么您可以像下面这样直接使用:-

iframe.contentWindow.location.reload();

对于ExtJS 3.x,在获取到iframe dom 后需要使用iframe.src 进行刷新。如果您提供了一些idiframe,那么您可以像下面这样访问

 Ext.get('iframe')//example id:'iframe'

在这个FIDDLE中,我使用TabPanelKeyNav创建了一个演示。我希望这将帮助您或指导您实现您的要求。

代码片段 ExtJS 3.X

Ext.onReady(function () 
    var tabs = new Ext.TabPanel(
        height: window.innerHeight,
        fullscreen: true,
        renderTo: document.body,
        activeTab:0,
        items: [
            title: 'Tab 1',
            html: 'tab1'
        , 
            title: 'Tab 2',
            html: 'tab2'
        , 
            title: 'Tab 3',
            itemId: 'tab3',
            padding: '20 20 0 20',
            items: [new Ext.BoxComponent(
                id: 'iframe',
                height: '100%',
                width: '100%',
                autoEl: 
                    tag: 'iframe',
                    src: 'https://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=eiffel+tower&amp;aq=&amp;sll=41.228249,-80.661621&amp;sspn=11.149099,23.269043&amp;ie=UTF8&amp;hq=&amp;hnear=Eiffel+Tower,+5+Avenue+Anatole+France,+75007+Paris,+%C3%8Ele-de-France,+France&amp;t=h&amp;ll=48.858186,2.294512&amp;spn=0.002471,0.00456&amp;z=17&amp;output=embed',
                    style: 'width: 100%; border: none'
                
            )],
            bbar: [
                text: 'Refresh UxIframe',
                id: 'refresh',
                handler: function () 
                    Ext.get('iframe').dom.src += '';
                
            ],
            listeners: 
                afterrender: function (panel) 
                    panel.keynav = new Ext.KeyNav(Ext.getBody(), 
                        scope: panel,
                        enter: function () 
                            Ext.getCmp('refresh').handler()
                        
                    );

                
            
        ]
    );
);

在这个 FIDDLE 我用 6.5 版本创建了相同的演示。所以对于新版本,它也会帮助你/其他人。在此处的较新版本中,组件 uxiframeuxiframe 具有 load() 方法。所以我们可以使用它来刷新 iframe。

代码片段 ExtJS 6.X

Ext.application(
    name: 'Fiddle',
    requires: ['Ext.ux.IFrame'],
    launch: function () 
        Ext.create('Ext.tab.Panel', 
            height: window.innerHeight,
            fullscreen: true,
            renderTo: document.body,
            activeTab:0,
            items: [
                title: 'Tab 1',
                html: 'Tab 1'
            , 
                title: 'Tab 2',
                html: 'Tab 2'
            , 
                title: 'Tab 3',
                itemId: 'tab3',
                padding: '20 20 0 20',
                items: 
                    xtype: 'uxiframe',
                    height: '100%',
                    width: '100%',
                    src: 'https://docs.sencha.com/extjs/6.5.2/index.html'
                ,
                bbar: [
                    text: 'Refresh UxIframe',
                    itemId: 'refresh',
                    handler: function () 
                        var uxiframe = this.up('#tab3').down('uxiframe');
                        uxiframe.load(uxiframe.src);
                    
                ],
                listeners: 
                    afterrender: function (panel) 
                        panel.keynav = Ext.create('Ext.util.KeyNav', 
                            target: Ext.getBody(),
                            scope: panel,
                            enter: function () 
                                this.down('#refresh').fireHandler()
                            
                        );
                        panel.focus(true);
                    
                
            ]
        );
    
);

【讨论】:

以上是关于按下输入 Extjs 时刷新标签面板内容的主要内容,如果未能解决你的问题,请参考以下文章

在 extjs 3.4 中刷新面板中的数据视图

Ext.formPanel 使用关闭按钮复制内容

ExtJs 3.4,如何在 Ext.panel 中刷新 autoLoad

Extjs-note

ExtJS (3.4):更新 TabPanel 中面板的工具提示

Highcharts 和 EXTJS 3:x 轴重叠的标签