当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 替换Html标签实现代码
Oct 14 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
Aug 24 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
Mar 25 Javascript
自学实现angularjs依赖注入
Dec 20 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
Jun 06 Javascript
vue使用Font Awesome的方法步骤
Feb 26 Javascript
通过循环优化 JavaScript 程序
Jun 24 Javascript
微信小程序8种数据通信的方式小结
Feb 03 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
Jul 18 Javascript
vue自定义组件实现双向绑定
Jan 13 Vue.js
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限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
python类继承用法实例分析
2014/10/10 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
Python实现定时任务
2017/02/08 Python
Python金融数据可视化汇总
2017/11/17 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
详解python算法之冒泡排序
2019/03/05 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
python类中super() 的使用解析
2019/12/19 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
大学团支书的自我评价分享
2013/12/14 职场文书
初中科学教学反思
2014/01/21 职场文书
假释思想汇报范文
2014/10/11 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python