Ext2.0之Tabpanel AJAX远程加载多标签页面模式开发技巧
目前开发的方式是采用远程load页面来实现多页面效果,类似于126邮箱多标签页效果。但是比126邮箱的方式更好,因为页面打开后是load到本地的,126似乎还会重新请求。在近期项目该开发方式已经基本成熟,积累了一些经验,与各位开发者共享和讨论。
该方式的页面布局为:一个bodylayout,左边为导航树,下方为信息框。上部为企业或系统LOGO。center为一个tabpanel,tabpanel远程加载页面(不清楚AJAX远程加载的请查阅EXT API之panel的autoLoad方法)。
由于该方式在页面处理上已经和传统的OPOA(One Page, One Application)有了很大的不同,导致了一些与之相关问题需要解决,以下是问题场景和我的解决方案:
1.如何在关闭子页面的时候,由子页面的代码确定关闭事件?
问题场景:
需要处理该问题的场景太多了,例如若干组页面成级联逻辑关系,关闭一个页面,其它几个页面也要关闭。例如一个PAGE打开一级的级联报表。
问题处理:
此类问题处理的关键是,需要找到标签页里x按钮关闭的那个Ext.panel。经事件可以按此方式获得:
通过DOM树位置寻找到该panel,这是最安全的方式,不需要知道panel的任何参数,你需要在你远程加载的页面的body下级里先定义一个HTML元素,例如:
<body>
<div id="myrenderDiv"></div>
</body>
由于页面通常是需要渲染一个对象元素成EXT组件。那么该元素就是最好的寻找位置,接下来寻找上级Panel按此方式寻找(jquery方式,你也可以按Ext方式来search DOM):
Ext.getCmp($('#myrenderDiv').parents('.x-panel')[0].id)
找到元素了,剩下的问题就很好办了,监听其destory方法就完成了关闭事件的处理
Ext.getCmp($('#myrenderDiv').parents('.x-panel')[0].id).on('destroy', function(){
alert('close myrenderDiv panel);
})
2.如何令子页面元素根据Tabpanel的大小而自适应?
问题场景:
主页面左边是导航条,采用bodylayout方式,那么左边折叠后。Tabpanel所处的center region就变大。需要自适应扩展TAB里面的元素,例如表格宽度,以达充满center region,实现最佳视觉和操作效果。
问题处理:
该方式关键的是去侦听外部元素的resize时间,如问题1的方案一样。找到了上级的容易panel,那么就能够有地方获得宽高来调整需要适应元素的宽高及位置:
Ext.getCmp($('#myrenderDiv').parents('.x-panel')[0].id).on(
'resize',
function(refObj, adjWidth, adjHeight, rawWidth, rawHeight){
Ext.getCmp('myrenderPanel').setHeight(rawHeight);
Ext.getCmp('myrenderPanel').setWidth(rawWidth);
}
);
3.Tab页的时间定时器如何处理?
问题场景:
某页面设置了定时器,在关闭后出现JS错误,发现是延迟定时器调用页的元素不存在导致。
问题处理:
既然定时器只与调用页有关,那么该定时器应该在调用页关闭时一并销毁,见问题1,监听如下实现:
var winSyncTimer = window.setInterval("Mypage.syncFunction()", 30000); //every 30 sec to synchronize
Ext.getCmp($('#myrenderDiv').parents('.x-panel')[0].id).on('destroy', function(){
window.clearInterval(winSyncTimer);
})
settimeout也类似此方式处理
4.AJAX异步调用如何保证安全回调?
问题场景:
当一个比较占用时间的AJAX调用后的时间,TAB页被关闭了。但是随后AJAX的callback却执行了,由于页面元素已经不存在,出现了JS错误。
5.采用此方式开关若干页面后发现内存占用很高,看似有严重你内存泄漏,问题原因是什么?
问题场景:
目前在规模化采用tabpanel远程加载方式处理。当有10个以上不同的页面被加载和释放后。即使tabpanel仅留一个tab页,内存还是占用很高。
6.怎样合理的管理各页面的dom id和js命名?
问题场景:
混乱了混乱了。本来项目成员单独的页面都好好的,加载到标签到tabpanel就工作不正常了,应该怎样保证各页面之间最低耦合并不出现冲突?
……………………(未完持续)
Ext2.0之Tabpanel AJAX远程加载多标签页面模式开发技巧的更多相关文章
- php+ajax远程加载避免重复提交
近日在练习签到送积分功能时,发现可以在一瞬间的时候提交好多次 导致可以重复领取多次积分 除了增加请求限制之外 发现ajax提交没有限制重复提交 遂立此贴为警示 首先上表单代码 <form ons ...
- Bootstrap Modal 使用remote从远程加载内容
Bootstrap的Modal这个模态窗组件还是很好用的,但在开发的过程中模态窗中的内容大部分都是从后端加载的.要实现模态窗的内容是从后端加载话,常用的实现方式有2种.它们是: (1) ...
- 淘宝购物车页面 智能搜索框Ajax异步加载数据
如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...
- 在Unity中创建可远程加载的.unity3d包
在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...
- ajax验证表单元素规范正确与否 ajax展示加载数据库数据 ajax三级联动
一.ajax验证表单元素规范正确与否 以用ajax来验证用户名是否被占用为例 1创建表单元素<input type="text" id="t"> 2 ...
- 使用ajax()方法加载服务器数据
使用ajax()方法加载服务器数据 使用ajax()方法是最底层.功能最强大的请求服务器数据的方法,它不仅可以获取服务器返回的数据,还能向服务器发送请求并传递数值,它的调用格式如下: jQuery.a ...
- 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案
Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...
- Python爬虫-05:Ajax加载的动态页面内容
1. 获取AJAX加载动态页面的内容 1.1. Introduction 如果所爬取的网址是通过Ajax方式加载的,就直接抓包,拿他后面传输数据的文件 有些网页内容使用AJAX加载,只要记得,AJAX ...
- Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页
欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...
随机推荐
- 升级 CentOS git 1.7.1 到 1.7.12
CentOS 源里的 git 版本是 1.7.1,如果远程创建的库所用 git 的版本比它高,在 pull 的时候,如果本地有修改,就会永久阻塞:在 push 的时候就会失败. CentOS 源里的 ...
- java并发编程(一)
多个线程访问同一个变量时,可能会出现问题.这里我用两个线程同时访问一个int count变量,让他们同时+1.同时让线程睡眠1秒,每个线程执行10次,最后应该输出20才对,因为count++并不是原子 ...
- 转载 -- C# 中的委托和事件
原文地址:http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx C# 中的委托和事件 引言 委 ...
- Maven实站读后感
这本书是一本非常经典的Maven教程,通俗易懂,同时介绍的东西十分实用,在工作上都能用到. 以前在公司里面需要要问同时的有关的Maven的问题,都可以自己解决了. 除了最基本的,以后自己可能要用到的: ...
- vim插件介绍
代码补全 http://blog.sina.com.cn/s/blog_a6559d920101acv3.html这个牛逼.************************************** ...
- UVA 714 Copying Books 二分
题目链接: 题目 Copying Books Time limit: 3.000 seconds 问题描述 Before the invention of book-printing, it was ...
- Centos——rpm和yum
间歇性的学习了centos的一些使用,发现一段时间不操作,就会忘掉其中的概念或者操作方式方法,于是在此总结一下. 一.问题描述 首先,把一个我最常忘记的概念性的东西在这里记录一下: 什么是yum,什么 ...
- Http、tcp、Socket连接区别
转自Http.tcp.Socket连接区别 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助. 1.TCP连接 要想明白Sock ...
- hdu 2736 Surprising Strings(类似哈希,字符串处理)
重点在判重的方法,嘻嘻 题目 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int ...
- SPOJ MULTQ3 7299 Multiples of 3 (区间更新)
题目连接:http://www.spoj.com/problems/MULTQ3/ #include <iostream> #include <stdio.h> #includ ...