当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 相关文章推荐
javascript 触发事件列表 比较不错
Sep 03 Javascript
js 设置选中行的样式的实现代码
May 24 Javascript
js网页侧边随页面滚动广告效果实现
Apr 14 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
Jun 27 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
javascript计时器编写过程与实现方法
Feb 29 Javascript
node的process以及child_process模块学习笔记
Mar 06 Javascript
angular6.0开发教程之如何安装angular6.0框架
Jun 29 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
详解Vue CLI 3.0脚手架如何mock数据
Nov 23 Javascript
vue 父组件通过v-model接收子组件的值的代码
Oct 27 Javascript
一起深入理解js中的事件对象
Feb 06 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更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
php自动载入类用法实例分析
2016/06/24 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
慎用 somefunction.prototype 分析
2009/06/02 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
javascript实现表单验证
2016/01/29 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
Python中的自定义函数学习笔记
2014/09/23 Python
python中MySQLdb模块用法实例
2014/11/10 Python
Python中使用不同编码读写txt文件详解
2015/05/28 Python
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
父亲节感言
2015/08/03 职场文书