前台JS框架宣讲活动总结.docx
《前台JS框架宣讲活动总结.docx》由会员分享,可在线阅读,更多相关《前台JS框架宣讲活动总结.docx(20页珍藏版)》请在冰豆网上搜索。
前台JS框架宣讲活动总结
引入JQuery框架宣讲活动总结
孙权
参加了老大组织的这次引入前台JS框架的宣讲活动,也拜读了几位同事的活动总结,受益匪浅,感触颇多。
早年接触过很多前端技术,包括JS的prototype、ajax、JQuery、ExtJS等,基于Flash的flash、flashAS、flex、AIR等;基于Windows的ActiveX、DLL等;基于Java的applet等。
以前在选择框架时是相当慎重的,因为自己开发的项目差不多都是面向公网访问。
对脚本的执行效率占用资源必须有所控制;对客户端与服务器的交互次数也必须尽量减少;对初次加载页面的时间都讲究到毫秒,将代码简化简化,甚至将一个DIV的id或class名称都尽量用简短的命名;对不同客户端不同浏览器不同的屏幕分辨率也要进行完整的判断;为了追求W3C的标准验证通过,丢掉了早年用习惯了的table/tr/td,全部改用div+css等等等等。
而目前从事的电信BSS系统开发要幸福得多得多了:
已经不用考虑或者可以弱化上面的问题,BSS基本上是专线,客户的企业内部员工使用,带宽和服务器等硬件资源相当充足了。
并且无需考虑不同浏览器的兼容性(onlyIE),甚至中文编码问题(allGBK),翻页方式、数据展现方式等也不需要犹豫(原型Tapestry:
task-orientedcomponent面向任务组件)。
只管在后台准备好数据,表现都交由框架。
正是对这种深度封装的依赖,带来了一些不便,比如有时有一些灵活的界面构思、巧妙的实现方式、复杂的业务交互,到着手开发时却傻了眼,无从下手。
如同刘鹏提到的一些客户的反馈,ms有必要在部门内部,掀起一场前端开发学习的热潮^_^,为CRM2WADE框架添砖加瓦,让WADE亦炫亦幻亦疯狂。
呵呵,啰嗦了一堆fh,我想就以下三个方面和大家作一些汇报总结和研究探讨:
一、JQuery框架在CRM2的应用前景,以及其它框架的命运:
)
如衷老师介绍,JQuery在JS框架领域绝对是大牌,以其轻便灵活和广大群众基础而闻名,也是我们产品部门最值得引入和推广的框架之一。
其应用前景广阔而充满生机,以下结合JQuery能给WADE框架改进带来的好处进行举例分析,以期抛砖引玉:
1、操作更简单易行
引入jQuery对现有组件,进行二次封装,或开发一些常用的组件。
比如我在内蒙营销系统中封装的“客户多选组件”。
如下图所示:
(一次性营销方案新增)调用该组件的代码路径:
/cvsroot/CU_BSS_BF/CU_BSS_BF/crm/j2ee/BSSWEB/custmgr/web/sendordersales/OnceSchemeEdit.html
目前WADE框架中除了树型结构以及推拉框可以实现多选外,下拉菜单等都没有提供多选功能,但很多的查询页面,都需要这样多选条件的组件,比如,在查询用户信息时,查询条件中的网别选项,如果用普通下拉菜单(select/option),对不起,只能选择其中一个。
由此,如果结合jQuery,完全可以开发出很多多选组件,包括针对静态参数的通用多选组件。
模仿Ext的效果如图所示:
2、交互更友好生动
内蒙综合营销工作平台代码路径:
/cvsroot/CU_BSS_BF/CU_BSS_BF/crm/j2ee/BSSWEB/custmgr/web/ndesktop/Desktop.html
BSS4.1主管看板客户经理看板代码路径:
/cvsroot/CU_BSS_V41/web/ndeskview/DeskView.html
/cvsroot/CU_BSS_V41/web/ndeskview/ExtDemo.html
在内蒙综合营销系统工作平台以及BSS4.1的主管、客户经理看板中,分别实现了div布局、iframe内嵌页面布局拖拽和位置记忆功能。
其中内蒙综合营销系统由JS面向过程思想开发完成,拖拽不是很流畅;模块维护要靠更新前后台代码,增加许多判断。
BSS4.1看板刚对其进行了改进,采用了JS面向对象思想,并用了现有框架已引入的prototype、Ajax等JS类库,在嵌入多个iframe页面的情况下,经自测效率反而有很大提升。
另外内嵌页面引入了ExtJS,经精简、美化、不断调试,已经满足后台可配置化,无需前台页面开发模块化的要求。
保留了列的显示控制、列排序、列显示配置记忆及结合WADE后台的翻页功能等。
下图展示的是BSS4.0北四省,VIP个性扩展信息,照片上传功能。
实现效果如下图所示。
在原有的“文件上传组件”上作了改动,利用了JS的从上到下顺序执行的原理,重写了弹出模态上传窗口的函数popupUploadDialog以及上传文件成功后返回执行的函数setUploadFieldContent,从而巧妙地实现了,图片上传及图片预览的功能。
由此我想JS的动态性以及jQuery的强大,完全可以在我们后续的开发过程中让我们的系统更加友好而且生动,包括页面刷新提交等待、错误信息提醒等交互场合,发挥重要作用。
BSS4北四省VIP个性扩展信息照片上传代码路径:
/cvsroot/CU_BSS_BF/CU_BSS_BF/crm/j2ee/BSSWEB/custmgr/web/custview/PersonExtInfo.html
3、界面更简洁清爽
在页面内容较多,或操作步骤较多时,如客管里的“名单制集团新增”功能点,集成了查询,Ajax局部刷新,基本资料录入,联系人联系信息添加,数据提交校验等复杂的流程操作,可以考虑引入jQuery,在控制流程和逻辑判断上,界面展合等方面将会带来很多便利。
4、编码更优雅轻松
JQuery的初衷也像其他语言或框架一样,是想尽可能地让代码简洁并且可重用。
而WADE框架估计是因为诞生的比较早(JQuery是2006年创建),而且可能认为现有框架够用,多年没有正式推广新版本。
公司前辈其实也考虑到了引入成熟类库的问题,像prototype和ajax、json等。
这样做的好处当然是可以让代码变得更易读,可以用更简短语句表达复杂的逻辑。
举几个典型的例子:
a.方法链(methodchaining)
每次对jQuery对象调用方法时,方法都会返回相同的jQuery对象,应该是借鉴了Hibernate,如:
Hibernate方法链写法:
SessionFactorysessions=newConfiguration()
.addResource(“hello/Message.hbm.xml”)
.setProperties(System.getProperties())
.buildSessionFactory();
纯JS写法:
(见demo_1.1.html)
none;">
vardiv=document.getElementById("message");
div.style.backgroundColor="red";
div.style.border="1pxsolidblue";
div.style.width="300px";
div.innerHTML="Hello,world!
";
div.style.display="block";
JQuery写法:
(见demo_1.2.html)
$('#message').css('background','red').css('width','300px').css('border','1pxsolidblue').html('Hello,world!
').show();
b.选择器(selector)
应该是jQuery最独一无二的最值得引入的亮点。
开发时可以使用从CSS1到CSS3几乎所有的选择器,以及jQuery独创的高级而复杂的选择器。
另外还可以加入插件使其支持XPath选择器,甚至可以编写属于自己的选择器。
比纯JS、DOM的选择器:
document.getElementById(),document.getElementsByTagName(),childNodes,parentNode等等选择器要纯洁和优美多了。
jQuery中$("标签名")和$(".class名")返回的都是所有满足的节点,至于进一步筛选可以添加一些函数,如eq,gt,lt等等。
jQuery选择器实在是太强大了,有很多也不一定记得住。
选择一个页面元素有时可能会有N*N种方法,实际开发过程中遇到选不中,或者选择筛选太复杂,或者难以考虑以后页面扩展时当前的选择器是否能保证选择准确的情况,翻API吧,总有一种适合您:
c.迭代和隐式迭代(iterationAndimplicititeration)
大量的循环结构变得不再必要,从而大幅地减少代码量,并使代码风格变得易读易维护。
另外jQuery里的方法都被设计成自动操作对象集合,而不是单独的对象,操作时将存在一个批量的隐式的迭代。
比如当我们用jQuery找到带有".myClass"类的全部元素,然后隐藏它们时,不需要循环遍历每一个返回的元素。
1)迭代
(见demo_2.1.html)
varstr="";
vararr=[{cols:
'm_1',rows:
[]},{cols:
'm_2',rows:
[{id:
'ManaCustStatInfo1',window:
1},{id:
'LeaderTaskStatInfo',window:
0},{id:
'CampaignStatInfo',window:
0}]},{cols:
'm_3',rows:
'MyUnReadSms1',window:
'SmsQuickPassage1',window:
'NeedReminder1',window:
0}]}];
for(i=0;ivarrows=arr[i].rows;for(j=0;jstr+=rows[j].id+",";}}alert(str);jQuery写法:(见demo_2.2.html)varstr="";vararr=[{cols:'m_1',rows:[]},{cols:'m_2',rows:[{id:'ManaCustStatInfo1',window:1},{id:'LeaderTaskStatInfo',window:0},{id:'CampaignStatInfo',window:0}]},{cols:'m_3',rows:[{id:'MyUnReadSms1',window:0},{id:'SmsQuickPassage1',window:0},{id:'NeedReminder1',window:0}]}];$.each(arr,function(i,obj){$.each(obj.rows,function(j,row){str+=row.id+",";})});alert(str);2)隐式迭代纯JS写法:(见demo_3.1.html)ChangecolorsHideDIVShowDIV 1122
varrows=arr[i].rows;
for(j=0;jstr+=rows[j].id+",";}}alert(str);jQuery写法:(见demo_2.2.html)varstr="";vararr=[{cols:'m_1',rows:[]},{cols:'m_2',rows:[{id:'ManaCustStatInfo1',window:1},{id:'LeaderTaskStatInfo',window:0},{id:'CampaignStatInfo',window:0}]},{cols:'m_3',rows:[{id:'MyUnReadSms1',window:0},{id:'SmsQuickPassage1',window:0},{id:'NeedReminder1',window:0}]}];$.each(arr,function(i,obj){$.each(obj.rows,function(j,row){str+=row.id+",";})});alert(str);2)隐式迭代纯JS写法:(见demo_3.1.html)ChangecolorsHideDIVShowDIV 11
str+=rows[j].id+",";
}
alert(str);
jQuery写法:
(见demo_2.2.html)
$.each(arr,function(i,obj){
$.each(obj.rows,function(j,row){
str+=row.id+",";
})
});
2)隐式迭代
(见demo_3.1.html)
Changecolors
HideDIV
ShowDIV
55变到这里
functionchangeColor(){
vardivs=document.getElementsByTagName("div");
for(i=0;ivardiv=divs[i];div.style.backgroundColor="yellow";if(div.id=="stop"){varspans=document.getElementsByTagName("span");if(spans!=null&&spans!=undefined&&spans.length>0){varspan=spans[0];span.innerHTML="Stoppedatdivindex#"+i;}break;}}}functionshowDIV(){vardivs=document.getElementsByTagName("div");for(i=0;ivardiv=divs[i];div.style.display="block";}}functionhideDIV(){vardivs=document.getElementsByTagName("div");for(i=0;ivardiv=divs[i];div.style.display="none";}}jQuery写法:(见demo_3.2.html)ChangecolorsHideDIVShowDIV112233
vardiv=divs[i];
div.style.backgroundColor="yellow";
if(div.id=="stop"){
varspans=document.getElementsByTagName("span");
if(spans!
=null&&spans!
=undefined&&spans.length>0){
varspan=spans[0];
span.innerHTML="Stoppedatdivindex#"+i;
break;
functionshowDIV(){
for(i=0;ivardiv=divs[i];div.style.display="block";}}functionhideDIV(){vardivs=document.getElementsByTagName("div");for(i=0;ivardiv=divs[i];div.style.display="none";}}jQuery写法:(见demo_3.2.html)ChangecolorsHideDIVShowDIV1122
functionhideDIV(){
for(i=0;ivardiv=divs[i];div.style.display="none";}}jQuery写法:(见demo_3.2.html)ChangecolorsHideDIVShowDIV11
div.style.display="none";
(见demo_3.2.html)
ChangecolorsHideDIVShowDIV
$('#cc').click(function(){
$('div').each(function(index,domEle){//domEle==this
$(domEle).css('backgroundColor','yellow');
if($(this).is('#stop')){
$('span').text('Stoppedatdivindex#'+index);
returnfalse;
$('#hd').click(function(){
$('div').hide();
$('#sd').click(function(){
$('div').show();
二、透过框架看本质:
由点及面,追根溯源–HTML>CSS>JS
WEB前端技术复杂烦多,要点也非常离散,但基于B/S架构的系统都离不开浏览器,而浏览器负责向服务器发送请求,通http协议将传送服务器端生成的html文档给浏览器解释成图文并茂的界面。
打个比方:
html就像刚交付的毛坯房,房型和一些简单的门窗已经给你了。
CSS就是装修过程,格局和装饰主要靠它了。
装修好了,再赏你个漂亮老婆,它就是JS,然后你就不孤单了,有交流这个房子也没那么空荡荡地,充满活力了。
老婆再给你生个孩子,小日子就滋润了,孩子就是jQuery等JS类库,是未来,将给你带来无穷的快乐。
呵呵,当整个系统成功运行一段时间,再赏你些插件和类库,就该是儿孙满堂了^_^
所以,通俗地理解,浏览器要的是HTML,它是房子它是容器,房型定下来后,CSS样式给你一些固定的装饰,只有少量的动态功能,比如:
超级链接鼠标悬停样式(hover)、还有IE独有的嵌入JS脚本的功能,后者已强烈不推荐使用了。
所以让界面交互响应和动态变化,主要就靠JS了。
JS搭载在几乎所有的浏览器中,包括手机终端的浏览器中。
JS的使命就是响应不同的事件,来改变HTML源码和CSS属性等,不断翻炒,同时被改变后的html、CSS将由浏览器解释呈现各种不同的表现形式。
比如:
弹个窗口啊,隐藏个form表单啊,处理个后端数据再显示到页面某个位置啊等等。
目前互联网应用已经进入WEB3.0时代了,甚至更新的HTML5技术标准都在制定中,但B/S架构的思想是不会变。
现在的信息聚合、分享,分布式数据库,包括视频分享、偷菜的网页游戏等,都离不开标签语言(HTML、XHTML、XML)和脚本程序(像Ajax,flashActionScript等)。
JS有面向过程的特性,它由上而下顺序执行。
JS没有严格的类型检查,刚刚给变量赋值为字符串型,下面马上就可以给它覆盖成整型,这是因为JS里一切皆对象--Object!
包括函数、字符串、整型数据、数组等。
JS也有面向对象的特性,它提供了prototype原型,可以用来继承、覆盖、扩展原有属性、函数等。
所以它的扩展也千变万化。
从一个个小的实例和应用开始,不断掌握它的性格,因材施教,这孩子还是很有趣很有出息的。
三、实际开发中的建议和相关工具推荐
1.建议
a)全部掌握或全部能熟练使用不现实,可以利用搜索引擎,借用我们熟悉的JAVA或PL/SQL甚至VBScript的语法、函数等来查找JS的语法及函数。
比如可以搜索关键字:
js数组equals、jsreplaceAll、jslastIndexOf、jstrim、jsnewDate、jsmessageBox、js弹出模态窗口、jscookie操作、jscase语句、jsmatchregExp、js正则test……
b)函数中的参数,如果是字符串,一般习惯用单引号。
以示与纯JS的区分,也有让代码看上去更简洁的用意吧。
不是很确定,我看大家都习惯这么写:
c)开发过程中,将鼠标右键功能放开。
具体配置文件位置在:
etc/XXCU/application.xml中产品模式修改为:
productmode="false",好处是可以在框架页面内点右键,查看html源文件检查异常、查看页面属性中的url找出page是谁,请求参数有哪些等。
d)框架只是一个补充,诱惑太多了,让人眼花缭乱。
哥只是个传说!
我的建议是,以灵活运用、习惯使用、解决实际问题为主要目的,如果只是迷恋招式,很容易学得一身花拳绣腿,大敌当前反而迷茫了。
2.相关工具推荐
a)Companion.JS
一款IE下的JS调试工具,类似于FireFox下的FireBug,可以定位到JS报错的所在行,并高亮显示。
安装后,需要重启系统,IE7和IE8下默认为禁用,需要在加载项里启用。
使用时在查看菜单下,如下图所示勾选后,即在状态栏多出JS调试栏:
WindowsXP下IE通用,但Win7貌似有点不兼容,需要找到合适的版本安装。
b)IEDeveloperToolbar
一款可以用来定位页面元素,调试CSS和需要查看部份源代码的时候特别有用。
安装和使用方式类似于上面介绍的Companion.JS。
c)IECollection
可以选择安装IE的所有历史版本。
IE版本间的兼容性比较好,但是如果还是不怎么放心,可以安装这个合集,切换来调试自己的页面,是否有异常。
d)Photoshop6.0绿色精简版
推荐鼎鼎有名的PS(还有很多其他的工具或图片处理软件了),主要想用来提取RGB(三原色Red–Green-Blue)色彩的编码,该编码共6位,其中分别用两位16进制数代表R-G-B,数值越大越浅,越小越深。
#FFFFF是白色#000000是黑色。
也可以在需要提取页面的已有的配色时,可以按PrtSc键抓屏,然后在PS中用吸管提取色彩编码。
e)AptanaStudio
也是一款基于eclipse的插件,有完整安装版,也有插件版,主要用来开发前端页面的。
PHP,HTML,JS,CSS,JSP,还有各种JS类库、框架包几乎通吃,有代码提示功能,并且会在代码提示JS系统函数时,告知IE和FF是否支持等贴心功能。
f)iecv.exe
一款查看管理IE浏览器Cookie的工具,直观便捷
水平所限,有很多不足之处,欢迎大家批评指正。
谢谢。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1