2010-11-12 46 views
27

我一直在尋找CoffeeScript,我不知道如何編寫這樣的代碼。它如何處理其語法中的嵌套匿名函數?CoffeeScript中的匿名函數語法

;(function($) { 
      var app = $.sammy(function() { 

      this.get('#/', function() { 
       $('#main').text(''); 
      }); 

      this.get('#/test', function() { 
       $('#main').text('Hello World'); 
      }); 

      }); 

      $(function() { 
      app.run() 
      }); 
     })(jQuery); 
+4

的[CoffeeScript的網站(http://jashkenas.github.com/coffee-script/)具有*嘗試的CoffeeScript *功能,它編譯成JavaScript的飛行。我幾分鐘後就能找出答案。 – 2010-11-12 16:13:48

回答

41

實際上並沒有編譯它,但這應該工作

(($) -> 
    app = $.sammy -> 

    this.get '#/', -> 
     $('#main').text '' 

    this.get '#/test', -> 
     $('#main').text 'Hello World' 

    $(-> 
    app.run() 
) 
)(jQuery); 
+0

非常感謝你們 – Handloomweaver 2010-11-12 16:51:58

+11

由於coffeescript自動將代碼封裝在一個匿名函數中,所以實際上你可以在你的文件的頂部放置'$ = jQuery',並以jQuery作爲參數調用一個匿名函數。 – 2011-02-06 06:23:03

+2

是啊,只是做一個線路端口的他的代碼 – 2011-02-06 14:18:43

34

馬特的答案是正確的,但在這裏是一種替代方法:

在CoffeeScript的1.0(在此之後發佈的幾周問題出現了),引入了一個do運算符,該運算符運行緊隨其後的函數。它主要用於循環捕捉變量,因爲

for x in arr 
    do (x) -> 
    setTimeout (-> console.log x), 50 

(其中傳遞一個參考x到匿名函數)行爲不同於

for x in arr 
    setTimeout (-> console.log x), 50 

後者將簡單地輸出最後在arr進入反覆,因爲只有一個x

無論如何,你應該知道do作爲運行一個匿名函數的方式,沒有額外的圓括號,雖然它對於參數傳遞的能力目前有點有限。我已經提出了proposal to broaden them

目前,您的代碼示例相當於將

do -> 
    $ = jQuery 
    ... 

如果我的建議被接受,將有可能寫

do ($ = jQuery) -> 
    ... 

代替。

+0

這種方法是非常好的,因爲會計咖啡的哲學,它不需要任何右括號 – 2014-03-28 10:36:41

4

短變異

do ($=jQuery)-> 
app = $.sammy -> 
    @get '#/', -> $("#main").text '' 
    @get '#/test', -> $('#main').text 'Hello world' 
$ -> app.run()