从iframe调用EXTjs中的父控制器函数

时间:2016-11-04 15:55:13

标签: javascript jquery html iframe extjs

美好的一天,我对这个简单的问题感到震惊,我再次需要你的建议:

我正在编辑EXTjs应用程序(我没做过)。 在这个应用程序中,有一个iframe,调用外部html文件,定义:

items: [{
        xtype: "component",
        id: "dasboardM",
        autoEl: {
            tag: "iframe",
            width: '100%',
            height: '95%',
            src: "/resources/extendpanel/dashboard.html"
        }
    }]

我需要调用视图控制器中定义的函数来自iframe,会有几个函数被调用,而且现在我已经设置了一个简单的测试用例,所以我创建了控制器对于具有iframe的视图文件,如下所示:

Ext.define('Dor3.view.merch.MerchController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.merch',
    ...
    onIframeCall : function(){
    console.log("fromIframe!");
    }

好吧,在iframe我有这个代码,我在sencha论坛上发现了一个旧帖子:

$(".iframeToExt").click(function(){
    var myParent = window.parent;
    var controller = myParent.window.Dor3.app.getController('Dor3.view.merch.MerchController');
    controller.onIframeCall();
    });

这实际上不起作用,好吧,有没有办法从iframe调用该函数?

提前感谢。

2 个答案:

答案 0 :(得分:1)

您可以从iframe向父窗口发送消息,并编写响应它的代码。例如,来自window.parent.postMessage('message', '*'); 执行:

MerchController

onmessage中,您可以像这样实施window.onmessage = function(ev){ if (ev.data == 'message') { controller.onIframeCall(); } };

'message'

请注意,如果需要,您可以传递对象而不是{{1}}。检查postMessage的API信息。

答案 1 :(得分:0)

你可以简单地使用(appname).app.getController(控制器的全名) 这将返回您的控制器对象&你可以调用那个控制器的方法。