当jQuery遭遇CoffeeScript的时候 使用分享


Posted in Javascript onSeptember 17, 2011

当我多年前初次接触jQuery时我感觉我来到了程序员的天堂。它极大简化了DOM操作。函数式编程变得如此容易,尽管更多适合RIA开发的框架近年来在浮现,但是我仍旧无法想象一个没有jQuery的程序人生是多么的罪恶,相信你也有同感~
而来到CoffeeScript的世界,同样的美妙故事再次上演。在写了几行代码后我相信你将不会再想念原生的Javascript了。CoffeeScript包含了许多新特性,当将它与jQuery结合时,你会发现一片新天地。
本文的目的就在于展示CoffeeScript和jQuery协同工作时美妙场景。
像老板一样指挥你的代码
CoffeeScript提供了一堆酷毙了的数组迭代方法。最好的事莫过于这不仅仅能工作于数组,还能工作于jQuery对象了。来行诗一般的代码吧:
formValues = (elem.value for elem in $('.input'))
这行代码将会被翻译为如下的Javascript:

var elem, formValues; 
formValues = (function() { 
var _i, _len, _ref, _results; 
_ref = $('.input'); 
_results = []; 
for (_i = 0, _len = _ref.length; _i < _len; _i++) { 
elem = _ref[_i]; 
_results.push(elem.value); 
} 
return _results; 
})();

老实说最初这样写代码确实让人提心吊胆的,但是一旦你开始拥抱CoffeeScript的魔法时,你会爱上它的。
飞一般的方法绑定
在jQuery的回调中使用"=>"将会大大减省你手动绑定方法到对象的麻烦。还是来看段代码吧:
object = func: -> $('#div').click => @element.css color: 'red'

下面是编译输出的Javascript:
var object; 
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; 
object = { 
func: function() { 
return $('#div').click(__bind(function() { 
return this.element.css({ 
color: 'red' 
}); 
}, this)); 
} 
};

代码中的@element指向了一个jQuery的对象,该对象是在其他地方指定的——比如object.element = $('#some_div').
任何使用"=>"所指定的回调函数都会自动绑定到原来的对象上,没错,这很酷。
在2011年函数是这样调用的
瞅一眼这个:
$.post( 
"/posts/update_title" 
new_title: input.val() 
id: something 
-> alert('done') 
'json' 
)

使用CoffeeScript,多个参数可以写成多行来调用,逗号和大括弧是可选的,这使得一些jQuery中签名比较长的方法比如$.post() 和 $.animate() 等更加易读。这儿还有一个例子:
$('#thing').animate 
width: '+20px' 
opacity: '0.5' 
2000 
'easeOutQuad'

很美味的Coffee不是吗?要注意第一个参数是一个匿名的对象,你甚至可以省略调用函数的元括弧。
让初始化来的更性感吧
我最初开始使用jQuery时我是这样做页面初始化的:
$(document).ready(function() { 
some(); 
init(); 
calls(); 
})

CoffeeScript和新版的jQuery使得上面的代码进化的如此性感:
$-> 
some() 
init() 
calls()

函数定义语法在CoffeeScript里本身已经非常酷了,能在上面这些场合使用使得其更酷了。你会发现所有需要回调的函数调用在CoffeeScript中都是如此简单。
更多关于CoffeeScript请访问其官网

注:已经有一本关于CoffeeScript的书在七月发行了,其中有一整章的内容是关于jQuery的。

Javascript 相关文章推荐
Javascript开发包大全整理
Dec 22 Javascript
js正文内容高亮效果的实现方法
Jun 30 Javascript
高效的获取当前元素是父元素的第几个子元素
Oct 15 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
Dec 29 Javascript
html的DOM中document对象anchors集合用法实例
Jan 21 Javascript
javascript自定义右键弹出菜单实现方法
May 25 Javascript
AngularJS 模型详细介绍及实例代码
Jul 27 Javascript
简单理解vue中track-by属性
Oct 26 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
Aug 13 Javascript
微信小程序 scroll-view的使用案例代码详解
Jun 11 Javascript
利用node.js开发cli的完整步骤
Dec 29 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
Sep 17 #Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
Sep 16 #Javascript
asp.net 30分钟掌握无刷新 Repeater
Sep 16 #Javascript
jquer之ajaxQueue简单实现代码
Sep 15 #Javascript
js substr、substring和slice使用说明小记
Sep 15 #Javascript
javascript 闭包
Sep 15 #Javascript
用JQuery模仿淘宝的图片放大镜显示效果
Sep 15 #Javascript
You might like
用PHP连接Oracle数据库
2006/10/09 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
php rsa加密解密使用详解
2015/01/14 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
PHP加密技术的简单实现
2016/09/04 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
Jquery中获取iframe的代码
2011/01/11 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
vue-resourc发起异步请求的方法
2020/02/11 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
使用css3背景渐变中的透明度来设置不同颜色的背景渐变
2014/03/31 HTML / CSS
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
岗位职责的定义
2013/11/10 职场文书
党校培训自我鉴定范文
2014/03/20 职场文书
水毁工程实施方案
2014/04/01 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
新手上路标语
2014/06/20 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
2014年标准化工作总结
2014/12/17 职场文书
小学课改工作总结
2015/08/13 职场文书
承诺书的签字人,需不需要承担相应的责任?
2019/07/09 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书