原作:How CoffeeScript makes jQuery more fun than ever—— Stefan Buhrmester

翻译:filod

转载声明:请注明原作者、翻译者以及译文链接。


译者前言:虽然对ruby不太了解,但是看到CoffeeScript诗一般的代码确实被怔住了,和jQuery之前给我的感觉是如此的相似——都是一个字,美,当jQuery遭遇到CoffeeScript时,会蹦出什么样的火花呢?

当我多年前初次接触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').animatewidth: '+20px'opacity: '0.5'2000'easeOutQuad'

  

很美味的Coffee不是吗?要注意第一个参数是一个匿名的对象,你甚至可以省略调用函数的元括弧。

让初始化来的更性感吧

我最初开始使用jQuery时我是这样做页面初始化的:

$(document).ready(function() {some();init();calls();
})

CoffeeScript和新版的jQuery使得上面的代码进化的如此性感:

$->some()init()calls()

函数定义语法在CoffeeScript里本身已经非常酷了,能在上面这些场合使用使得其更酷了。你会发现所有需要回调的函数调用在CoffeeScript中都是如此简单。

更多关于CoffeeScript请访问其官网

注:已经有一本关于CoffeeScript的书在七月发行了,其中有一整章的内容是关于jQuery的。

转载于:https://www.cnblogs.com/filod/archive/2011/09/17/2179578.html

[翻译]当jQuery遭遇CoffeeScript的时候——妙,不可言相关推荐

  1. 【翻译】Jquery 1.7 发布

    [翻译]Jquery 1.7 发布 原文:http://blog.jquery.com/2011/11/03/jquery-1-7-released/ jQuery 1.7已经可以下载!您可以从jQu ...

  2. html工厂函数,jQuery的工厂函数$()的妙用

    jQuery的工厂函数$()的妙用 1.理解DOM结构:祖先元素,父元素,子元素,兄弟元素,每一个元素都是一个DOM对象 2.必须先用工厂函数$()将DOM对象转为jQuery对象,才可以使用jQue ...

  3. [翻译]在jQuery 1.5中使用deferred对象

    原文:http://www.erichynds.com/jquery/using-deferreds-in-jquery/ 翻译:三生石上(http://cnblogs.com/sanshi/) 译者 ...

  4. 开源:Angularjs示例--Sonar中项目使用语言分布图(CoffeeScript版)

    关于SonarLanguage是什么东东,这里就不在描述了,如果你对它感兴趣的话,请移步到上篇随笔开源:Angularjs示例--Sonar中项目使用语言分布图.这里是最近学习CoffeeScript ...

  5. 李炎恢教程/妙味课堂javaScript/jQuery/js/Ajax全套视频

    使用JavaScript编写一个Base.js基础库,然后通过这个基础库+自行开发的插件,最终完成一个精简型博客主题的前端功能. 这是一个问答系统精简版,高仿了一些知乎网站的部分功能.通过这个小型项目 ...

  6. [翻译]ASP.NET MVC4新特性之脚本压缩和合并

    2019独角兽企业重金招聘Python工程师标准>>> [翻译]ASP.NET MVC4新特性之脚本压缩和合并 目前主流浏览器限制客户端对同一域名只能同时发起6(PS:原文如此)个H ...

  7. jQuery使用手册

    jQuery是一款同prototype一样优秀js开发库类,特别是对css和XPath的支持,使我们写js变得更加方便!如果你不是个js高手又想写出优 秀的js效果,jQuery可以帮你达到目的!   ...

  8. jQuery是什么,jQuery入门简介

    |seektanjQuery是最近比较火的一个JavaScript库,从del.icio.us/上相关的收藏可见一斑. 到目前为之jQuery已经发布到1.2.1版本,而在这之前的一个星期他们刚发布1 ...

  9. 推荐--jQuery使用手册

    翻译整理:Young.J 官方网站:http://jquery.com jQuery是一款同prototype一样优秀js开发库类,特别是对css和XPath的支持,使我们写js变得更加方便!如果你不 ...

最新文章

  1. git diff 比较文件_使用Python创建你自己的diff工具
  2. 多进程同时写一个文件会怎样?分别用write和fwrite去观察现象
  3. 福利派送!6 月份赠书活动开始啦!
  4. Linux学习笔记03
  5. 认识zookeeper
  6. 从上往下打印出二叉树的每个节点,同层节点从左至右打印
  7. https://blog.csdn.net/cscscscsc/article/details/50
  8. es6解决回调地狱问题
  9. 使用kibana和elasticsearch日志实时绘制图表
  10. kaggle(04)---avazu_ctr_predictor(baseline)
  11. hacker代码_如何仅用7行R代码构建Hacker News Frontpage抓取工具
  12. .NET 对接JAVA 使用Modulus,Exponent RSA 加密
  13. pytorch nn.CrossEntropyLoss()中的label不需要是one_hot
  14. OpenSesame-史上最详细教程
  15. 灰色系统理论(Matlab实现)
  16. php sqlserver 日期转字符串,sqlserver  时间(datetime)转换成字符串
  17. 老毛桃发帖子 去广告
  18. python免费的实时语音交互(讯飞语音识别+青云客Robot)
  19. 多线程+SOCKET编程实现qq群聊的服务端和客户端
  20. 适用于各浏览器支持图片预览,无刷新异步批量上传js插件(2)

热门文章

  1. win7一直显示正在关机_LG可编程控制器一直显示正在通信维修选凌科公司规模大...
  2. 2013年计算机考试ppt,2013年全国专业技术人员计算机应用能力考试PPT题库
  3. 计算机科学与技术做什么实验,计算机科学与技术专业实验教学大纲
  4. antd中tooltip换行_ant design 中实现表格头部可删除和添加
  5. 学好java再学c 可以吗_再论学好C的重要性!!!
  6. php date t_php date 参数
  7. php 图片文件转base64编码格式,php如何将图片转为base64编码格式
  8. 通讯录小程序android,通讯录小程序,找回青春的回忆
  9. swift 通知_Swift 闭包无脑加 [weak self] 行不行?
  10. 为什么大公司都不用mfc和qt_百度竞价推广效果下降,为什么有的老板还是只愿意做百度推广?...