Extjs Ext.ux.IFrame的用法 以及父子窗口間函數相互調用
Ext.ux.IFrame Extjs官方提供的一個組件,可以很方便的使用。
這樣就完成了一個簡單的IFrame的使用,通過Extjs的擴展 它變成了一個組件 可以放在任何容器內 並且支持父容器的布局 很靈活
var iframe = Ext.create("Ext.ux.IFrame", {
frameName: 'hello',
src: "MyJsp.jsp"
});
Ext.create("Ext.Panel", {
layout: "fit",
items: iframe,
renderTo: Ext.getBody(),
width: 300,
height: 300,
title: "Panel里面是一個Iframe"
});
Ext.ux.IFrame 常用的幾個方法,文檔中沒有,看源碼的時候知道的!
getWin()
返回iframe的窗口對象 即(window)
getFrame()
返回iframe元素的dom對象 即(<iframe src="{src}" name="{frameName}" width="100%" height="100%" frameborder="0"></iframe>)
getDoc()
返回iframe窗口的doucment對象
getBody()
返回iframe窗口的body的DOM元素
load(src)
加載src自定的資源
需要說明的問題
源代碼里有這樣一個函數 initEvents 在這個方法可以給我們的組件添加事件。me.iframeEl 是將DOM元素<iframe>...</iframe>包裝稱為 Ext.dom.Element對象
這樣就可以給這個元素添加事件了。 注意這里的load的事件[ 來自文檔:Only supported by window, frames, objects and images.]
說明只支持windon frames objects images 這4種元素
initEvents : function() { var me = this; me.callParent(); me.iframeEl.on('load', me.onLoad, me); }
源代碼里有這樣一個函數,當一個組件使用了renderTpl的時候,那么可以使用renderSelectors這個屬性 來為renderTpl里面的元素生成
Ext.Element對象.
Ext.apply(this.renderSelectors, { iframeEl: 'iframe' });
Ext.create('Ext.Component', { renderTo: Ext.getBody(), renderTpl: [ '<h1 class="title">{title}</h1>', '<p>{desc}</p>' ], renderData: { title: "Error", desc: "Something went wrong" }, renderSelectors: { titleEl: 'h1.title', descEl: 'p' }, listeners: { afterrender: function(cmp){ // After rendering the component will have a titleEl and descEl properties cmp.titleEl.setStyle({color: "red"}); } } });
JavaScript原生父子窗口間相互調用
子窗口調用父窗口 window.parent.func();
父窗口調用子窗口 window.frames['iframeName'].func();