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

标签: 翻译 jquery coffeescript | 发表时间:2011-09-17 13:22 | 作者:filod We_Get
出处:http://www.cnblogs.com/

原作: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').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的。

作者: filod 发表于 2011-09-17 13:22 原文链接

评论: 11 查看评论 发表评论


最新新闻:
· 考拉盒子:儿童应用精品聚集地(2011-09-18 00:26)
· 小鬼子的虚拟体感装置,让你体会被刺穿的感觉(2011-09-18 00:25)
· Mozilla Firefox 7.0 Beta 6 发布(2011-09-18 00:25)
· 一个人的京东商城(2011-09-18 00:24)
· 感官实现智能手机付费,可能吗?让万事达卡来告诉你吧(2011-09-18 00:23)

编辑推荐:TechEd社区之夜暨博客园北京俱乐部活动报名

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [翻译 jquery coffeescript] 推荐:

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

- We_Get - 博客园-首页原创精华区
原作:How CoffeeScript makes jQuery more fun than ever—— Stefan Buhrmester. 转载声明:请注明原作者、翻译者以及译文链接. 译者前言:虽然对ruby不太了解,但是看到CoffeeScript诗一般的代码确实被怔住了,和jQuery之前给我的感觉是如此的相似——都是一个字,美,当jQuery遭遇到CoffeeScript时,会蹦出什么样的火花呢.

为什么CoffeeScript这么美?

- Vingel - CNode社区
JavaScript让人又爱又恨, 因为它独特, 卓越, 而且不可或缺. 尽管如此, 要说JavaScript很美, 恐怕也有些勉强. JavaScript现在如日中天, 未来发展更是不可小觑. 但毕竟它的设计非常仓促1, 有些陷阱2, 有些晦涩3; 要不为啥Douglas Crockford的书名字叫《The Good Parts of JavaScript》呢.

3本免费CoffeeScript电子书

- Ran - 黑客志
Smooth CoffeeScript,超过200页的内容以及35个课后习题,从基础的函数式编程到面向对象,再到基于HTML5 Canvas以及WebSockets的客户端-服务器Web应用. 不需要任何编程基础,如果你已经对脚本语言有所了解,那么可以直接跳到范例章节. CoffeeScript Cookbook,这是一本多人协作的CoffeeScript书籍,集合社区之力为你提供各种CoffeeScript的便捷菜谱,如果没有找到你想要的,你也可以通过这里贡献你自己的菜谱.

CoffeeScript 還可以用來做什麼? -- Hubot

- kylexlau - Blog.XDite.net
Github 內部自用的機器人 Hubot 一直是個神秘的產品,常常看到內部員工在投影片內炫耀 Hubot 多麼的屌:. 但往往只是聞其聲,不見其蹤. 不過要是按照 Github 內部慣例,常常在員工投影片出現的東西,往往就是下一個 release 的標的. 因此大家也都是迫不及待在等 Hubot 的釋出.

前端工具推荐-Koala,支持Less、Sass、CoffeeScript编译。

- - V2EX - 技术
越来越多的前端同学喜欢使用Less、Sass等预处理形式来编写CSS与JavaScript.这些语言确实很棒,大大提高工作效率,语法风格也很受Geek们青睐. 我也是一个Less重度使用者,之前一直用winLess编译less文件. less编译工具比较多人使用的有winless、simpless、codekit.

JQuery 选择器

- - CSDN博客Web前端推荐文章
}

点击我

.    像上面这样把JavaSript代码和HTML代码混杂在一起的做法同样也非常不妥,因为它并没有将网页内容和行为分离,所以才有JQuery选择器的学习.

点击我

. //给class为demo的元素添加行为.

jquery操作xml

- - CSDN博客Web前端推荐文章
jquery真的很强大,虽然一直在用jquery,不用一直都没有深入,这几天重新学习了一下,不得不感叹她的强大,已经让我深深入迷. 这里记录一下,她是怎么快速地操作xml的.. 这里我们有一个xml文件:. jquery如何操作呢,总的思想,就是和操作dom差不多的方法. 首先我们获取这个文件的内容:(我先引入jquery库哈).

jQuery JSONP跨域

- - Web前端 - ITeye博客
基于Jquery的Ajax跨域访问. 单点登录服务器(sso服务器). 登录网页项目的时候,由于使用了单点登录,所以页面会跳转到sso服务器,进行统一登录,. 现在需要在该界面增加令牌的认证,但是SSO服务器和令牌服务器部署在不同的服务器,且暂时没有要合并的可能,所以在SSO登录的时候必须要对令牌进行验证,就必须涉及到了跨域访问的问题.