美好的一天,我对这个简单的问题感到震惊,我再次需要你的建议:
我正在编辑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调用该函数?
提前感谢。
答案 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(控制器的全名) 这将返回您的控制器对象&你可以调用那个控制器的方法。