当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 相关文章推荐
Safari5中alert的无限循环BUG
Apr 07 Javascript
parentElement,srcElement的使用小结
Jan 13 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
Sep 05 Javascript
JS插件overlib用法实例详解
Dec 26 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
Jul 07 Javascript
Node.js的基本知识简单汇总
Sep 19 Javascript
微信小程序  网络请求API详解
Oct 25 Javascript
PHP7新特性简述
Jun 11 Javascript
微信小程序调用摄像头隐藏式拍照功能
Aug 22 Javascript
在vue中读取本地Json文件的方法
Sep 06 Javascript
vue组件之间通信实例总结(点赞功能)
Dec 05 Javascript
微信小程序多列表渲染数据开关互不影响的实现
Jun 05 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 数组和字符串互相转换实现方法
2013/03/26 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
vue+canvas实现移动端手写签名
2020/05/21 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
Python3基础之基本数据类型概述
2014/08/13 Python
python对字典进行排序实例
2014/09/25 Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
在Python中使用第三方模块的教程
2015/04/27 Python
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
绿色城市实施方案
2014/03/19 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
信用卡工作证明范本
2015/06/19 职场文书
九不准学习心得体会
2016/01/23 职场文书
股权投资协议书
2016/03/23 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书