您的位置: 首页 > 技术文档 > 网页制作 > web前端结构与行为的分离
使用有趣的自定义标记来布局页面 回到列表 改善用户体验之密码强度提示
用户名:
密 码: 忘记密码
注册会员 游览论坛 论坛帮助
 web前端结构与行为的分离

作者:mytharcher  时间: 2006-12-11 文档类型:原创 来自:蓝色理想
浏览统计 total:3090 | year:104 | Quarter:104 | Month:104 | Week:104 | today:7

如今的web开发也需要越来越接近MVC框架模式,web的前端可视为由结构+表现+行为组成,根据W3C的标准,使用xhtml+css已经使得结构和表现成功分离。在网上看到越来越多被重构过的网站是件非常令人欣喜的事情,如果现在要让我再做一个表格布局的网页,当我看到那一堆可以被一句CSS代替的表格代码时,我甚至会恶心到想吐!标准给挣扎在混沌的淤泥里的我们带来了清新空气,良好重构过的页面也像出淤泥而不染的清莲,香馨沁人心脾!那么下一步就应该是结构和行为的分离了,因为表现和行为本来是不相关的,就算微软的浏览器标准支持一个我当时非常喜欢的css里的behavior,但现在看来表现依然不能包括行为,不应该去代替行为行事。在这个三角形里,结构可以说是重点,表现依赖于结构,行为也依赖于结构,表现和行为的联系相对较少(除了一些特效操作),表现是被结构导入的,于是开始思考,行为是否也可以完全由外部导入,在结构即html页面里完全看不到一句javascript代码?

经过本人一番研究,至少一半左右简单应用的行为是可以分离开的。为什么说是一半呢,由于通过对对象定义的事件函数还存在参数传递的一些问题,但绕过这个障碍实施全部应用的可行性正在研究中,而且态势也在逐渐明朗,将在下文提及。所以答案是肯定的——结构(html)与行为(javascript)可以实现分离!

下面来看分离面临的核心问题,一个我的实例(为方便调试,js代码仍写在script标签里,但其他任何body里的对象都不再添加js代码):

运行代码框

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

函数initBehavior()的作用就是建立一个操作序列,为每个html文档结构中需要使用行为的对象进行事件触发与相应操作处理函数的连接,即生成行为。如例子中对id为holder的div元素添加的onclick事件函数,同理也可以添加onmouseover,onmouseout……等事件。于是我们分离的第一步完成了,这一步要做的就是重复initBehavior函数里面的内容,添加其他触发事件。

接下来要做的就是具体实现每个触发函数了,如上例showNode()函数,问题的核心也就在这里,因为定义的是事件处理入口,函数中没办法在定义事件的时候就确定参数,于是参数表就隐式被传递了。为什么说有参数表,这也是在查阅了网上一些资料才知道的,每个函数也是一个对象,函数对象就有一个属性是arguments:Array(),而当函数被调用时,参数都是arguments里的元素,这个大家可以另外做测试。要说的是,不同的浏览器在这里有一点小小的区别,对于IE,每当一个事件被触发时他的一个全局对象window.event就会接收到信息,在处理函数的参数表里并没有体现。而FF则不同,一个事件触发时,则与这个事件连接的处理函数会带有一个默认的事件参数,作为参数表里的第一个参数传递给处理函数,这里参数表就派上用场了,看上面的程序,由于函数没有定义形参,IE解析的参数表里面是空的,所以函数里定义的evt得到的是event的引用,FF则因为事件作为第一个参数表里的元素也得到一个事件对象。下一句也就容易理解了,对于不同浏览器,FF的事件来源属性是target,IE的是srcElement,那么到这里就通过解析得到事件来源对象,也就可以对这个对象进行相关操作了,那么本来需要从函数传递过来的对象参数也就不必要了。这里说到上面提到的一个不允许传递参数的机制,这个是在flash的ActionScript里也碰到的,仔细思考了一下,似乎明白了设置这个机制的道理,因为当一个事件触发函数时,其实需要传递的参数都是在外部暂时静态存在的,那么直接在函数里调用外部的对象或其他数据,也就完成了需求。

说是完成了,但心里总是隐隐约约觉得不妥,好象还是不完美,不过到这已经足够了,我们的目的是结构与行为的分离,那么已经实现了,收工大吉!

经典论坛讨论
http://bbs.blueidea.com/thread-2701872-1-3.html

出处:蓝色理想
责任编辑:moby

◎进入论坛网页制作网站综合版块参加讨论

相关文章 更多相关链接
基于标准的web项目开发模式探索
使用有趣的自定义标记来布局页面
当前的网站设计风格
理论上逻辑越清晰,产品越易用?
Web2.0的视觉设计
热门搜索:CSS Fireworks 设计比赛 网页制作 Dreamweaver Studio8 Flash
站点最新 站点最新列表
熊猫烧香图标病毒
寻找07年中国50位优秀网页设计师
上海老弄堂里的邻家少女Melody
光线也疯狂
用Photoshop做脸部美容
登封政府门户网站新版发布
Fireworks抠图之枝繁叶茂的树木
Google 百度 搜索引擎习惯的分析
网页制作前台之javascript
《Flash网站建设技术精粹》
栏目最新 栏目最新列表
用Photoshop做脸部美容
Fireworks抠图之枝繁叶茂的树木
Google 百度 搜索引擎习惯的分析
网页制作前台之javascript
苹果图标制作——组合的技巧
数据对象类表单自动绑定
苹果图标制作——立体化图标
苹果图标制作——形状的建立
Flash AS2 中的拍照图片无损压缩
用Photoshop打造ipod nano

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

本文总共有 6 条评论,现在显示最新的 5 条。评分:- llllllllllllllllllll + 评分人数: 2 ,平均分: 1.00


eye2u Publish at 2006-12-12 19:40:04
很棒!加油
nitian18 Publish at 2006-12-12 16:38:13
有错误哦,竟然将中文的”这样的东东放进来了
Aether Publish at 2006-12-11 21:41:35 评分1
另外,load事件会等待所有的页面元素,包括flash和img都下载完毕,但是jQuery可以使用
document.ready,只需要主DOM下载完毕,立刻绑定事件。
对于非常重要的事件,还是推荐在DOM片段载入以后立刻绑定。
Aether Publish at 2006-12-11 21:39:28 评分1
language=”javascript” 这个代码在严格的模式下是没有的。
另外,jQuery的 $(element).chick().show(),多重绑定会更爽的。
163895 Publish at 2006-12-11 17:53:08
MVC模式早就用在网站上面了,大网站都是分离的,不然累死啊

查看全部评论

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
Don't Make Me Think 第2版
《Flash第一步系列》
《交互设计之路》
《Dreamweaver 从基础到实践》
《色彩管理》
《情感化设计》
《GUI设计禁忌》