当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 相关文章推荐
利用jquery操作select下拉列表框的代码
Jun 04 Javascript
基于jquery ajax 用户无刷新登录方法详解
Apr 28 Javascript
解析JavaScript中delete操作符不能删除的对象
Dec 03 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
May 14 Javascript
深入理解JavaScript的React框架的原理
Jul 02 Javascript
基于JavaScript实现购物网站商品放大镜效果
Sep 06 Javascript
微信小程序 地图(map)实例详解
Nov 16 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
Feb 09 Javascript
React Native开发封装Toast与加载Loading组件示例
Sep 08 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
Jan 21 Javascript
vue中格式化时间过滤器代码实例
Apr 17 Javascript
Vuex实现购物车小功能
Aug 17 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 zend 相对路径问题
2009/01/12 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
项目实践之javascript技巧
2007/12/06 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
jQuery的context属性用法实例
2014/12/27 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
python生成器generator用法实例分析
2015/06/04 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
电气专业应届生求职信
2013/11/01 职场文书
运动会跳远加油稿
2014/02/20 职场文书
党校学习自我鉴定
2014/02/24 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
Minikube搭建Kubernetes集群
2022/03/31 Servers