当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 相关文章推荐
Prototype 学习 工具函数学习($A方法)
Jul 12 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
Dec 15 Javascript
jQuery 对Select的操作备忘记录
Jul 04 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
Aug 07 Javascript
使用JS取得焦点(focus)元素代码
Mar 22 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
Jul 18 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
Dec 26 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
Jan 13 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
Jan 29 jQuery
vue获取时间戳转换为日期格式代码实例
Apr 17 Javascript
工作中常用js功能汇总
Nov 07 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 adodb分页实现代码
2009/03/19 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
vue-loader教程介绍
2017/06/14 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
vue项目中的webpack-dev-sever配置方法
2017/12/14 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
浅谈python 中类属性共享的问题
2019/07/02 Python
Python中内建模块collections如何使用
2020/05/27 Python
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
护理专业应届毕业生推荐信
2013/11/15 职场文书
生物科学专业个人求职信范文
2013/12/05 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
国际会计专业求职信
2014/08/04 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
房产公证书格式
2015/01/26 职场文书
销售工作决心书
2015/02/04 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
公司门卫岗位职责
2015/04/13 职场文书
Pygame Rect区域位置的使用(图文)
2021/11/17 Python