当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 相关文章推荐
上传文件返回的json数据会被提示下载问题解决方案
Dec 03 Javascript
javascript中call apply 的应用场景
Apr 16 Javascript
JavaScript中的fontsize()方法使用详解
Jun 08 Javascript
jQuery跨域问题解决方案
Aug 03 Javascript
jquery遍历函数siblings()用法实例
Dec 24 Javascript
深入理解angularjs过滤器
May 25 Javascript
Vue 过渡(动画)transition组件案例详解
Jan 22 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
Apr 28 Javascript
Vue+Express实现登录状态权限验证的示例代码
May 05 Javascript
vue 查看dist文件里的结构(多种方式)
Jan 17 Javascript
详解ES6 CLASS在微信小程序中的应用实例
Apr 24 Javascript
javascript实现时钟动画
Dec 03 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读取远程gzip压缩网页的方法
2014/12/29 PHP
php简单获取目录列表的方法
2015/03/24 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
JavaScript修改css样式style
2008/04/15 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
python 接口_从协议到抽象基类详解
2017/08/24 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
通过Turtle库在Python中绘制一个鼠年福鼠
2020/02/03 Python
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
金融专业毕业生推荐信
2013/11/26 职场文书
青年文明号事迹材料
2014/01/18 职场文书
《胡杨》教学反思
2014/02/16 职场文书
老干部工作先进事迹
2014/08/17 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
在CSS中使用when/else的方法
2022/01/18 HTML / CSS
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS