做过.NET,ROR,现专职JS满两年了.就开发过程中遇到的问题和做过的实践,从以下几个方面,做一个回忆记述,当总结.
[color=red]有关框架只是一个泛泛的概述,希望大家多参与第二篇以后讨论,那些都是我在项目中的实际做法。点击以下面的链接[/color]
[size=medium]
[u][b]目录[/b][/u]
(一)有关框架
[url=http://www.iteye.com/topic/627308](二)文件组织与代码组织[/url]
[url=http://www.iteye.com/topic/627439](三)JS与FLASH交互[/url]
[url=http://www.iteye.com/topic/627538](四)ajax局部刷新与RPC[/url]
[url=http://www.iteye.com/topic/628228] (五)获取设置元素样式与监听元素事件[/url]
[url=http://www.iteye.com/topic/629165] (六)页面元素的创建调整与关联[/url]
(七)浏览器兼容性问题
(八)WEB软件的前端架构实践
[/size]
[size=medium][b]prototype:[/b][/size]
刚开始用的是prototype,我现在都忘光了。只记得是如何开始讨厌prototype的,有一次遇到一个问题,我定义了一个next(),然后我写οnclick="next()",却没有执行到我定义的next(),查出是它执行了元素本身的next()方法,这个方法是prototype给他的,由此推论,它侵入于element的其他方法也有此问题,我很恶心它这么干。为此我还专门写了一个脚本去检查侵入性,见[url]http://www.iteye.com/topic/251422#693230[/url],除了用它检查框架的侵入性外,还用于检查自己的脚本中有没有无意中创建了全局变量。
[size=medium][b]jQuery:[/b][/size]
抛弃prototype之后,工作上一直用jQuery。
[b][u]好的方面[/u][/b]:
短小精悍,特别赞他操作DOM的DSL,方法名短且实现风格统一,且覆盖到了DOM的方方面面。有了它你不用写长长的DOM方法。AJAX也很出色,$("sel").load(),$.get(),$.post().$.getJSON(),$.getScript()针对不同需求包装了不同的AJAX请求配置。
[b][u]不好的方面[/u][/b]:
CSS选择器,确实很强大,可我认为我只需要实现以下几种便可了。其它代码完全多余
插件质量方面。我用过的插件我几乎都改过,有的是有小BUG,有的是功能不全,有的文档示例不全。用过的有[url=http://www.kelvinluck.com/assets/jquery/jScrollPane/jScrollPane.html]jScrollPane[/url], jslider, [url=http://code.google.com/p/sexy-combo/]sexyCombo[/url], xxx tree, [url=http://odyniec.net/projects/imgareaselect/]imageAreSelect[/url] ,只有[url=http://bassistance.de/jquery-plugins/jquery-plugin-validation/]validation[/url]稍满意。
要用插件,大部分是出于UI widget的需求。jQuery UI只用过slider,我特别讨厌jQuery UI widget(无论插件还是官方)的接口风格和jQuery操作DOM的风格一样。当然它的THEME也一样的难看,虽然有很多种。我比较喜欢YUI的样子,很APPLE。UI方面是jQuery的软肋。基于此,如果YUI3的API接口不像YUI2那样的不统一和复杂,如果网站UI widget方面用的比较多的话,YUI也许比jQuery更适合。
[size=medium][b]YUI:[/b][/size]
关于YUI,YUI用过autocomplete和calendar,slider,写[url=http://www.iteye.com/topic/333439]SUI[/url]的时候,也尝试过其他组件。YUI文档和API很全,UI漂亮,但API有点太过复杂。CSS方面也是,得在body上加一个yui的class,导致对原有的css产生影响。相对于jQuery,它更重量级,好在它有loader来解决依赖的问题。用过WEB QQ的应该很满意,WEB QQ用的就是YUI2.6。当然YAHOO.COM也是(有人不知道不)。对于YUI3,那是相当的期待。 :D
[size=medium][b]Ext:[/b][/size]
做WEB软件一直用的是Ext,尝试过两种形式,一种是iframe,只用了表格,一种是单页面,全部都是Ext component。第一种我只用来做了简单的项目,通过简单配置来实现CRUD。我主要讲下单页面的,用EXT做业务复杂的WEB软件,不能一个一个页面独立开来做,那样会累死,还是得应用模板(可以用SUI),每种模板相对应一个控制页面组件的抽象类(VIEW控制层),套用此模板的页面代码继承此抽象类来实现自己的特殊逻辑。当然和后台交互的MODEL也有是以独立的类存在的,一句话,在前端我又分了三层。见图示:
[img]http://bellstar.iteye.com/upload/picture/pic/57925/284b5be8-bd54-3710-b142-5a37968712a2.jpg[/img]
(webApp,sui,ext也都是JS)
由于EXT有强大的STORE,它使得我们前端引用及操作数据的代码可以通过它和后端脱离出来。有一点小小的问题,就是EXT和ROR交互起来并不是很方便,我自己实现了符合REST的writer来操作数据。
Ext的UI组件丰富,也很成熟,虽然性能在IE上表现不佳,但这是IE的问题。Ext3.1性能据说大幅提升。
有了Ext,其实离做WEB软件还很远,因为界面和ajax形式的数据交互全部由前端来做的话,前端要很成熟的框架来搭架子,有个框架叫JS MVC,也许可以借鉴学习。
最后,上2张图养眼,不是美女!是界面欣赏 [url=http://bellstar.iteye.com/upload/picture/pic/57903/d2a17dba-ebe7-3abc-abd3-7eb155d8e64a.png]主界面[/url] [url=http://bellstar.iteye.com/upload/picture/pic/57905/962fa4ed-321d-3f15-8a9b-b199e4ddee63.png]FORM window[/url]
[size=medium][b]qooxdoo:[/b][/size]
不了解的可以通过[url=http://qooxdoo.org/]官方网站[/url]了解,也可以本人翻译的部分介绍[url=http://bellstar.iteye.com/category/54052]查看[/url]
javascript是一门隐晦的语言,在这一点上,我讨厌它。有诸如模拟实现类与OO的N种方法、不同位置不同声明方式变量作用域不同、function的各种声明和调用方式等等让人头大,还有可能一不小心就中招,写JS真的要小心翼翼。
qooxdoo在JS之上构造了一门语言,然后以这个语言写了一套丰富的UI组件,相比较Ext,它的性能要好很多,虽然功能少了点。当然最主要的是用Ext,你还是要小心写JS。有了它你可以显式的声明你的对象及其OO关系,你会觉得安全很多,会找回写JAVA,C#的感觉。
用qooxdoo你要花一定时间先学习它这个语言,虽然目前它在UI组件上还不及EXT,但它的底子很好,所以我相信用它来做WEB软件,会很有效率且让客户满意,隔了好长一段时间没有继续学习它了,要继续。
[size=medium][b]选择框架:[/b][/size]
普通网站:jQuery,prototype, mootools
自定义UI widget较多的中大型网站:YUI
大的商业web软件,部署到企业内部: Ext, qooxdoo
小中型的web软件(放到互联网上的):jQuery.
[color=red]有关框架只是一个泛泛的概述,希望大家多参与第二篇以后讨论,那些都是我在项目中的实际做法。点击以下面的链接[/color]
[size=medium]
[u][b]目录[/b][/u]
(一)有关框架
[url=http://www.iteye.com/topic/627308](二)文件组织与代码组织[/url]
[url=http://www.iteye.com/topic/627439](三)JS与FLASH交互[/url]
[url=http://www.iteye.com/topic/627538](四)ajax局部刷新与RPC[/url]
[url=http://www.iteye.com/topic/628228] (五)获取设置元素样式与监听元素事件[/url]
[url=http://www.iteye.com/topic/629165] (六)页面元素的创建调整与关联[/url]
(七)浏览器兼容性问题
(八)WEB软件的前端架构实践
[/size]
[size=medium][b]prototype:[/b][/size]
刚开始用的是prototype,我现在都忘光了。只记得是如何开始讨厌prototype的,有一次遇到一个问题,我定义了一个next(),然后我写οnclick="next()",却没有执行到我定义的next(),查出是它执行了元素本身的next()方法,这个方法是prototype给他的,由此推论,它侵入于element的其他方法也有此问题,我很恶心它这么干。为此我还专门写了一个脚本去检查侵入性,见[url]http://www.iteye.com/topic/251422#693230[/url],除了用它检查框架的侵入性外,还用于检查自己的脚本中有没有无意中创建了全局变量。
[size=medium][b]jQuery:[/b][/size]
抛弃prototype之后,工作上一直用jQuery。
[b][u]好的方面[/u][/b]:
短小精悍,特别赞他操作DOM的DSL,方法名短且实现风格统一,且覆盖到了DOM的方方面面。有了它你不用写长长的DOM方法。AJAX也很出色,$("sel").load(),$.get(),$.post().$.getJSON(),$.getScript()针对不同需求包装了不同的AJAX请求配置。
[b][u]不好的方面[/u][/b]:
CSS选择器,确实很强大,可我认为我只需要实现以下几种便可了。其它代码完全多余
jQuery("#id")
jQuery("div.class")
jQuery("#id>div.class ")
jQuery("#id div.class")
插件质量方面。我用过的插件我几乎都改过,有的是有小BUG,有的是功能不全,有的文档示例不全。用过的有[url=http://www.kelvinluck.com/assets/jquery/jScrollPane/jScrollPane.html]jScrollPane[/url], jslider, [url=http://code.google.com/p/sexy-combo/]sexyCombo[/url], xxx tree, [url=http://odyniec.net/projects/imgareaselect/]imageAreSelect[/url] ,只有[url=http://bassistance.de/jquery-plugins/jquery-plugin-validation/]validation[/url]稍满意。
要用插件,大部分是出于UI widget的需求。jQuery UI只用过slider,我特别讨厌jQuery UI widget(无论插件还是官方)的接口风格和jQuery操作DOM的风格一样。当然它的THEME也一样的难看,虽然有很多种。我比较喜欢YUI的样子,很APPLE。UI方面是jQuery的软肋。基于此,如果YUI3的API接口不像YUI2那样的不统一和复杂,如果网站UI widget方面用的比较多的话,YUI也许比jQuery更适合。
[size=medium][b]YUI:[/b][/size]
关于YUI,YUI用过autocomplete和calendar,slider,写[url=http://www.iteye.com/topic/333439]SUI[/url]的时候,也尝试过其他组件。YUI文档和API很全,UI漂亮,但API有点太过复杂。CSS方面也是,得在body上加一个yui的class,导致对原有的css产生影响。相对于jQuery,它更重量级,好在它有loader来解决依赖的问题。用过WEB QQ的应该很满意,WEB QQ用的就是YUI2.6。当然YAHOO.COM也是(有人不知道不)。对于YUI3,那是相当的期待。 :D
[size=medium][b]Ext:[/b][/size]
做WEB软件一直用的是Ext,尝试过两种形式,一种是iframe,只用了表格,一种是单页面,全部都是Ext component。第一种我只用来做了简单的项目,通过简单配置来实现CRUD。我主要讲下单页面的,用EXT做业务复杂的WEB软件,不能一个一个页面独立开来做,那样会累死,还是得应用模板(可以用SUI),每种模板相对应一个控制页面组件的抽象类(VIEW控制层),套用此模板的页面代码继承此抽象类来实现自己的特殊逻辑。当然和后台交互的MODEL也有是以独立的类存在的,一句话,在前端我又分了三层。见图示:
[img]http://bellstar.iteye.com/upload/picture/pic/57925/284b5be8-bd54-3710-b142-5a37968712a2.jpg[/img]
(webApp,sui,ext也都是JS)
由于EXT有强大的STORE,它使得我们前端引用及操作数据的代码可以通过它和后端脱离出来。有一点小小的问题,就是EXT和ROR交互起来并不是很方便,我自己实现了符合REST的writer来操作数据。
Ext的UI组件丰富,也很成熟,虽然性能在IE上表现不佳,但这是IE的问题。Ext3.1性能据说大幅提升。
有了Ext,其实离做WEB软件还很远,因为界面和ajax形式的数据交互全部由前端来做的话,前端要很成熟的框架来搭架子,有个框架叫JS MVC,也许可以借鉴学习。
最后,上2张图养眼,不是美女!是界面欣赏 [url=http://bellstar.iteye.com/upload/picture/pic/57903/d2a17dba-ebe7-3abc-abd3-7eb155d8e64a.png]主界面[/url] [url=http://bellstar.iteye.com/upload/picture/pic/57905/962fa4ed-321d-3f15-8a9b-b199e4ddee63.png]FORM window[/url]
[size=medium][b]qooxdoo:[/b][/size]
不了解的可以通过[url=http://qooxdoo.org/]官方网站[/url]了解,也可以本人翻译的部分介绍[url=http://bellstar.iteye.com/category/54052]查看[/url]
javascript是一门隐晦的语言,在这一点上,我讨厌它。有诸如模拟实现类与OO的N种方法、不同位置不同声明方式变量作用域不同、function的各种声明和调用方式等等让人头大,还有可能一不小心就中招,写JS真的要小心翼翼。
qooxdoo在JS之上构造了一门语言,然后以这个语言写了一套丰富的UI组件,相比较Ext,它的性能要好很多,虽然功能少了点。当然最主要的是用Ext,你还是要小心写JS。有了它你可以显式的声明你的对象及其OO关系,你会觉得安全很多,会找回写JAVA,C#的感觉。
用qooxdoo你要花一定时间先学习它这个语言,虽然目前它在UI组件上还不及EXT,但它的底子很好,所以我相信用它来做WEB软件,会很有效率且让客户满意,隔了好长一段时间没有继续学习它了,要继续。
[size=medium][b]选择框架:[/b][/size]
普通网站:jQuery,prototype, mootools
自定义UI widget较多的中大型网站:YUI
大的商业web软件,部署到企业内部: Ext, qooxdoo
小中型的web软件(放到互联网上的):jQuery.