`
wj98127
  • 浏览: 268035 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

ext使用--Panel和iframe联合使用时页面高度的解决方法

    博客分类:
  • ext
阅读更多

       在项目使用borderLayout Panel时,比较传统的区域都是采用上左右的布局方式。上面是标题,左侧导航,右边作为展示区,在功能较少和页面布局样式单一的情况下使用one page one application就可以实现,但是如果功能复杂的情况下,这样做会更加吃力,开发难度也非常大,而且ext本身还存在内存溢出和效率等问题。

        在这个项目中我在展示区使用内嵌的iframe,如下:

var panel = new Ext.Panel({
		title:m.text,
	//	iconCls:iconCls,
		bodyStyle:'padding:0px 0px 0px 0px',
		html: '<IFRAME ID="IframeName" width="100%" height="100%" FRAMEBORDER=0 SCROLLING=NO SRC="${ctx}/'+m.href+'"></IFRAME>'
});
tabs.add(panel).show();

 

也有一个扩展实现 Ext.ux.ManagedIFrame(作者Doug Hendricks,附件miframe.js),研究不深不发表评论,示例代码如下:

mainPanel.add({
		id:'programResultDiv',
	                title :' title',
		closable: true,        
	                body : new Ext.ux.ManagedIFrame({
	                    autoCreate:{
	                        xtype : "panel",
	                        id:'iframe', // 设置访问的名称
	                src : url,                        
	                        frameBorder : 0,
	                        cls : 'x-panel-body',
	                        width : '100%',
	                        height : '100%'
	                    }
	                })
}).show();

 使用iframe就是每次都要下载一遍ext的类库文件......

 

内存释放的问题,每次更换展示区内容时,删除panel的时候自动将iframe占用的内存释放。

while(tabs.getComponent(0)!=null){
	// 在移除tabpanel前,释放内嵌iframe占用的内存
	tabs.getComponent(0).on("beforeremove", this.fixIFrame, this);
	fixIFrame: function(lr, cp, e) {
	var iFrame = cp.getEl().dom;
	 if(iFrame.src) {
		iFrame.src = "javascript:false";
	}
};
// 移除tab并释放内存
tabs.remove(tabs.getComponent(0),true);

 

在使用iframe的过程中,怎么使iframe内部的panel高度和父的panel高度保存一致呢?第一需要让父panel知道内嵌的panel的高度,第二需要让父panel能够改变它的高度来适应你的高度,那么就可以这样做:

在iframe内部的页面显示的告诉父panel自己要求的高度

parent.tabs.setHeight(600);

 

这样设置完成后,页面每第一次刷新的时候没问题,但是访问完别的页面再回来时,又发现页面高度变成了最后一次设置的高度,然后我们需要监听tab什么时候被激活的,这样的话,我们可以在父panel中加入监听和动作,ext有提供很全面的监听事件,如下:

 

listeners:{'tabchange':function(){
	document.frames.item('frame_'+tabs.getActiveTab().id).location.reload();
 }},

 这一行实际上是重新绘制了一次页面,主要是重新执行了一下setHeight方法,这样做不是太好,但是没有找到好的解决方法,希望大家能提一些有用的见意。

分享到:
评论
2 楼 汽车城路 2012-02-29  
我现在正在使用这个Extjs,目前也遇到了这个问题,就是怎么换掉border布局center位置的panel,我目前也是在panel的html里加个iframe,还有别的鼻中隔好用的方法么???
1 楼 swbssd 2010-04-30  
兄弟 我劝你赶快把Ext用在iframe嵌套放弃吧..
你这样做内存是释放了,但是泄露节点在累加 不能彻底的,不相信用sIEve测试下吧..

相关推荐

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 ...

    extjsIframe例子

    这个组件可能会包含以下关键属性和方法: 1. `html`: 用于设置IFrame的HTML代码,包括`&lt;iframe&gt;`标签。 2. `src`: IFrame的源地址,即要加载的外部HTML文档的URL。 3. `width`和`height`: 设置IFrame的尺寸。 4. `...

    ExtJs部署及使用方法

    ### ExtJs部署及使用方法详解 #### 一、ExtJs部署与配置 ##### 1.1 ExtJs库的安装 为了正确地安装ExtJs库,首先需要将ExtJs的源码包放置到项目的WebRoot目录下,即项目的根目录。在安装过程中,需要创建以下...

    EXT.NET(C#) 网页调用本地摄像头程式 (Ext.Net,Flash)

    在EXT.NET中,可以通过IFrame或者SwfObject等方法嵌入Flash对象。Flash提供了访问用户摄像头的API,允许网页应用请求权限并打开摄像头,捕获实时视频流。通过Flash的ActionScript代码,我们可以控制摄像头的开启、...

    ExtAspNet_v2.3.2_dll

    -为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 ...

    Ext上传文件控件

    这个控件通常与`Ext.form.Basic`和`Ext.form.Panel`一起使用,以实现完整的表单提交机制。 **文件上传组件的主要特点:** 1. **UI元素**:`Ext.form.FileField`创建一个输入字段,通常显示为"浏览..."按钮,用户...

    easyui+增强窗体 demo_ext为实例文件

    9、getAllExpandRowIndex、getExpandRowIndex、fixDetailRowWidth 这三个方法联合使用可解决detailView视图下列拖拽时显示错位问题。 10、修复datagrid 的rowEditing编辑风格在没有数据的datagrid中增加数据后,再...

    Ext例子及布局问题

    即:Ext.window 4.mainPage.html为tab布局,右面为tree中间为tab页面。 5.tz-normal-test.html为普通拖拽的练习。 6.tree-asynch-test.html为异步加载的树 7.tree-edit-test.html为节点可以编辑的树 8.tree-tz-test....

    extjs4.2.1 tabPanel刷新及关闭标签

    在版本4.2.1中,`TabPanel`提供了丰富的API和方法来控制其行为,如刷新当前标签页、关闭特定标签页等。 #### 刷新当前标签页 在ExtJS 4.2.1中,要实现刷新当前标签页的功能,可以采用以下方式: ```javascript ...

    Ext圖片上傳、刪除、查看.net源碼

    这可能使用`Ext.window.Window`或`Ext.LoadMask`来实现加载效果,同时配合`Ext.Component`或`IFrame`加载图片资源。 此外,为了优化用户体验,项目可能还包含了进度条显示文件上传进度,这通常使用`Ext.ProgressBar...

    Ext制作的教务管理系统[源码+数据库+说明]

    4.单击节点访问页面时,在主界面TabPanel新增一个Panel,Panel下放置一个iframe,将要链 接的页面放入iframe中。 5.grid数据加载,分页,编辑删除。 6.用户列表页面点编辑时,在父页面的TabPanel中增加一个标签,下...

    Ext_CrossDomain:Ext跨域的几种方法

    在JavaScript编程中,跨域(Cross-Origin)是一个...在使用这些方法时,务必注意浏览器兼容性和安全性问题,确保数据传输的可靠性和用户隐私的保护。同时,合理地运用跨域技术,可以提升Web应用的功能性和用户体验。

    EXT 布局 tab布局 普通拖拽 异步加载的树 节点可以编辑的树

    即:Ext.window 4.mainPage.html为tab布局,右面为tree中间为tab页面。 5.tz-normal-test.html为普通拖拽的练习。 6.tree-asynch-test.html为异步加载的树 7.tree-edit-test.html为节点可以编辑的树 8.tree-tz-...

    帆软用法总结(各模块语法规则,系统集成)

    ### 帆软报表使用详解 ...无论是Web页面集成、调用方法还是使用复杂的公式逻辑,帆软报表都能够提供完整的解决方案。随着技术的不断进步和发展,帆软报表的功能也会不断完善和扩展,以适应更多样化的应用场景。

    ExtJs使用IFrame的实现代码

    具体来看,代码首先定义了一个名为var p_center的Ext.TabPanel对象,这个对象被配置为在中心区域内显示,并具有调整大小、最小宽度、默认宽度、高度、自动滚动等属性。接着在items数组中,开发者添加了一个具有xtype...

    EXTJS 上传组件及示例

    - 上传组件通常与EXTJS的`Ext.form.Panel`配合使用,表单提交通常使用`Ext.Ajax.request`或`form.submit()`方法。 - `Ext.form.Basic`对象用于处理表单验证,确保所有字段都符合要求。 4. **异步上传**: - ...

    birt整合到web项目中遇到的问题及解决

    在本文中,我们将探讨将BIRT整合到Web项目中时可能会遇到的问题及其解决方案,包括BIRT与EXT的集成、MDX语言的使用、参数传递、报表展示以及界面定制等关键点。 1. **将BIRT放到Web项目中** 在Web项目中整合BIRT,...

    extjs相关

    它继承自 **Ext.Panel** 并配置了一些默认属性: - **layout**: 设置为 **accordion** 布局,这意味着当一个面板被展开时,其他面板会自动折叠。 - **region**: 设置为 **west**,表示这个面板位于主窗口的西侧。 - ...

    在PHP上显示JFreechart画的统计图方法

    var panel = new Ext.Panel({ border: false, fitToFrame: true, html: '&lt;iframe id="frameHelp" src="/getColumnChart.jsp" frameborder="0" width="100%" height="520"&gt;&lt;/iframe&gt;' }); return panel; } ``...

Global site tag (gtag.js) - Google Analytics