当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 相关文章推荐
实现连缀调用的map方法(prototype)
Aug 05 Javascript
js中浮点型运算BUG的解决方法说明
Jan 06 Javascript
javascript判断chrome浏览器的方法
Mar 26 Javascript
JavaScript判断是否为数字的4种方法及效率比较
Apr 01 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
Jun 10 Javascript
基于JS模仿windows文件按名称排序效果
Jun 29 Javascript
AngularJS  $modal弹出框实例代码
Aug 24 Javascript
node.js版本管理工具n无效的原理和解决方法
Nov 24 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
react-router browserHistory刷新页面404问题解决方法
Dec 29 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
Sep 26 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
PHP set_time_limit(0)长连接的实现分析
2010/03/02 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
javascript radio 联动效果
2009/03/04 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
违反学校规定检讨书
2014/01/18 职场文书
文明倡议书范文
2014/04/15 职场文书
公证委托书
2014/08/01 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
2014年政协工作总结
2014/12/09 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
php png失真的原因及解决办法
2021/10/24 PHP
Python正则表达式中flags参数的实例详解
2022/04/01 Python
Nginx HTTP跳转至HTTPS
2022/05/15 Servers