InfoQ

新闻

AJAX开发者继续向低调(unobtrusive)JavaScript迁移

作者 Matthew Bass译者 张凯峰 发布于 2008年6月30日 上午1时14分

社区
Java
主题
JavaScript
标签
AJAX
低调(Unobtrusive)JavaScript是一种正在浮现的技术,它能将JavaScript从HTML标记语言中分离开来。这非常类似于上世 纪90年代CSS的诞生所带来的页面样式和HTML的分离。比如,唐突的JavaScript写法会直接为某个文本框添加onClick事件处理器,就像 这样:
<input id="field" onclick="alert('hello')" />
而低调的JavaScript会一直等到页面全部加载完毕,才会把事件处理器跟文本框连接上:
<script type="text/javascript">
Event.observe(window, 'load', function() {
Event.observe($('field'), 'click', function() {
alert('hello');
};
});
</script>

<input id="field" />

这样写能够使HTML代码(在这个例子中就是我们的input标签)保持干净,并为开发者提供单一引用点来调试 JavaScript代码。低调JavaScript提倡将代码存储在外部的.js文件中,反对将其嵌入在HTML页面内的<script> 标签中。虽然这个范例占用了多行代码,但稍微大块点的JavaScript可以带来更加清晰和简洁的结构。

低调JavaScript的其他一些好处包括:

  • 关注点分离:将行为层从内容和展现层分离开来
  • 更易于处理浏览器的不一致性
  • 更易于阅读的简洁的代码

当与像Prototype这样的开源库结合使用时,会更加容易创建低调JavaScript。甚至有一些现成的框架专门设计用来将唐突的JavaScript转换成低调的JavaScript。

比如Low Pro,为Prototype添加了一些有用的帮助函数,可以显著地改善对浏览器事件模型的访问,并提供一个行为库来方便地连接低调JavaScript触发器。我们上面的示例使用Low Pro可以写成这样:

<script type="text/javascript">
Event.addBehavior({
'input#field:click' : function(e) {
alert('hello');
}
});
</script>

<input id="field" />

这样,行为在页面完成加载后就自动连接在一起。还可以使用CSS选择器来添加其他的行为,比如为触发选择元素。

随着AJAX网站数量的稳步增长,JavaScript在web应用开发中变得更加重要。保持JavaScript低调可以更加简单的开发出炫目的特性。它也使得维护这些网站变得更加容易,成本更少。

查看英文原文:AJAX developers continue migrating to unobtrusive JavaScrip

10 条回复

回复

内容的代码没有过滤 发表人 R Lee 发表于 2008年6月30日 上午2时42分
Re: 内容的代码没有过滤 发表人 cao yunfei 发表于 2008年6月30日 下午8时25分
翻译小问题 发表人 慧然 陈 发表于 2008年6月30日 上午3时9分
Re: 翻译小问题 发表人 cao yunfei 发表于 2008年6月30日 下午8时30分
Re: 翻译小问题 发表人 James Zhang 发表于 2008年6月30日 下午9时33分
Re: 翻译小问题 发表人 tony yao 发表于 2008年7月1日 上午1时3分
Re: 翻译小问题 发表人 ShiYong Wang 发表于 2008年7月1日 下午10时2分
jQuery 最简单了 发表人 james qiu 发表于 2008年6月30日 下午10时23分
这个有点片面了 发表人 zhimeng wangzm 发表于 2008年7月2日 上午12时45分
Re: 这个有点片面了 发表人 benk chou 发表于 2008年7月2日 上午3时9分
  1. 返回顶部

    内容的代码没有过滤

    2008年6月30日 上午2时42分 发表人 R Lee

    如题,请参考英文原文,InfoQ的编辑要把好质量关呀!

  2. 返回顶部

    翻译小问题

    2008年6月30日 上午3时9分 发表人 慧然 陈

    unobtrusive翻译成“低调”不太适合。这个单词应该不是简单的直译。推荐翻译成“无入侵”。意为“javascript脚本和html保持相对的独立”,符合web标准的“结构与行为分离”。

  3. 返回顶部

    Re: 内容的代码没有过滤

    2008年6月30日 下午8时25分 发表人 cao yunfei

    谢谢批评指正!

  4. 返回顶部

    Re: 翻译小问题

    2008年6月30日 下午8时30分 发表人 cao yunfei

    unobtrusive包含无入侵的意思,结构与行为分离是它的部分含义,但是不止是无入侵。我的理解,它还有让JavaScript尽量的跨平台,尽量不“打扰”页面的意思。就是说不能因为JavaScript代码中的错误让页面无法显示。这样看,低调似乎更接近它的意思。

  5. 返回顶部

    Re: 翻译小问题

    2008年6月30日 下午9时33分 发表人 James Zhang

    维科英汉词典
    unobtrusive
    adj. 不打扰的, 不多嘴的, 不带侵略性的, 不冒犯的, 谦虚的, 客气的

    严重同意翻译为“无入侵”
    “无入侵”已经是一个大家都公认接受、容易理解词汇了。为什么还要另外发明呀。
    想起来传闻很久的徐某翻译的《UML精粹》了

  6. 返回顶部

    jQuery 最简单了

    2008年6月30日 下午10时23分 发表人 james qiu

    $(function() {
    $('field').click(function() {
    ...
    });
    })

  7. 返回顶部

    Re: 翻译小问题

    2008年7月1日 上午1时3分 发表人 tony yao

    觉得不光是“无入侵”,还有让用户体验更好的意思!

  8. 返回顶部

    Re: 翻译小问题

    2008年7月1日 下午10时2分 发表人 ShiYong Wang

    支持用“无入侵”,虽然原文这种分离会带来用户体验更好等好处,但本质而言,这种把html和js分离的方式是其实就是传统意义上的“无入侵”。而其它的优点可以视为由“此(无入侵)”所带来的。所以没有必要另外发明一个词汇,来表达这个事件本身及其优点。这会带来困扰。技术界莫名的词汇已经太多了。

  9. 返回顶部

    这个有点片面了

    2008年7月2日 上午12时45分 发表人 zhimeng wangzm

    这个有点片面。分离的本意是对的。无入侵的原则也是对的。
    但是用事件这个例子却不合适。
    因为用ie等浏览器的原生事件支持,可以节省大量的脚本初始化时间,如果用脚本事后加事件,当面临着大量数据的时候(例如,你给页面搞个200行表格,然后给每行价格鼠标悬停事件,看看效果),会造成页面加载完毕后卡顿一下的。分离式趋势

  10. 返回顶部

    Re: 这个有点片面了

    2008年7月2日 上午3时9分 发表人 benk chou

    你不知道什么是事件冒泡吗?用得着给每行加事件吗?给表格加一个事件就可以了。而且,比内联方式省下大量字节。
    而且ie分析html时没有大量js会大大加快表格显示速度。

独家内容

剖析短迭代

敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?

应用JSF、Ajax和Seam开发Portlets(1/3)

本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。

AtomServer:数据分发的发布动力(第二部分)

在这篇文章里,Bryon Jacob和Chris Berry将和我们继续探讨AtomServer,它是基于Apache Abdera的完整Atom存储实现。作者还创建了几个Atompub规范扩展,其中包括自动标记、批处理和Feeds聚合。

架构师(试刊第二期)

InfoQ中文站的电子杂志《架构师》试刊第二期出版了!相比于上期,我们在内容的选择安排和版式上都根据读者的意见重新做了修正。“细节决定成败”,我们希望基于InfoQ中文站的专业内容,《架构师》能逐渐成为大家喜欢的电子刊物!

一种正规的性能调优方法:基于等待的调优

在本文中,Steven Haines探讨了Web应用性能调优问题。该领域过去更像是一门艺术而不是一门科学。他提出了一种称为基于等待调优的方法,使整个调优过程更加可度量,也因此更具科学性。

Java程序员ActionScript 3入门

通常来说,改变技术路线时最艰难的部分是辨别语言语法之间的不同。这篇文章就为Java开发者提供了一份如何转向Flex基础语言ActionScript的指南。

浅谈如何创建Rails应用

本视频主要以财帮子为例,介绍了如何创建一个PV为百万级的Rails应用。其中包括:Rails应用的服务器架构、Rails Cache的优化、负载均衡的处理、Web服务器的调试、分布式解决方案、Open API的设计等等。

Alexandru Popescu谈InfoQ.com网站架构

InfoQ首席架构师Alexandru Popescu在采访中谈论了InfoQ架构、Webwork与DWR、Hibernate与JCR、Hibernate可扩展性、最新的InfoQ视频流系统和InfoQ的未来规划。