我是ExtJS的新手。
这是我的窗口定义:
this.dialog = new Ext.Window({
title : "About us",
layout : 'anchor',
modal : true,
autoEl : {
tag : "iframe",
id: "myframe",
src : "../editor/actorseditor.html",
height: 500,
width : 600
} });
this.dialog.show();
我想从“actorseditor.html”关闭我的对话窗口。
如何实现这一目标。打开的窗口也没有关闭按钮。
提前致谢
答案 0 :(得分:1)
这仅在iFrame中的html页面来自与您的父页面相同的应用程序时才有效。或者至少协议,子域,域和端口都是相同的。
您需要在父页面中公开一个全局函数,该函数将由子页面(iframe)中运行的JavaScript调用。
在您的子页面中,您可以致电:
if (window.parent && window.parent.myGlobalFunction) {
window.parent.myGlobalFunction('hello!');
}
在您的父页面中,您包含以下全局函数(当然可以根据您的意愿命名):
function myGlobalFunction(input){
console.log('message received:'+input);
MyApp.app.fireEvent('closeMyWindow',input);
}
这假设您正在使用MVC,并且您在应用程序启动功能中创建了属性“app”并将其设置为“this”。而且你有一个控制器正在监听这样的aplication wide事件:
Ext.define('MyApp.controller.Qnum', {
extend:'Ext.app.Controller',
init:function(){
this.control({
...
});
//listen for app wide event fired by : MyApp.app.fireEvent('closeMyWindow',input);
this.application.on({
closeMyWindow: this.closeWindowItsDrafty,
scope: this
});
},
closeWindowItsDrafty:function(){
//get reference to my window
//call myWindow.close();
}
答案 1 :(得分:0)
我假设在actorseditor.html中,你必须有一个按钮
在此按钮中,您可以设置此侦听器:
listeners : {
click : function () {
Ext.getCmp('yourdialogid').close();
}
}
您还需要在对话框中输入ID。
答案 2 :(得分:0)
请在关闭按钮监听器中尝试关注:
var parentDialogWindow = window.parent.Ext.cmp('ID_OF_DIALOG_WINDOW');
parentDialogWindow[parentDialogWindow.closeAction]();