2013-05-16 58 views
1

更新:我的問題是由兩個函數返回而不是一個引起的。 $.each循環中的回調函數在if/else塊中生成了回報。儘管我在後面的問題中將其鏈接,但在CoffeeScript編譯爲JavaScript時,有一個關於how to override returns的好問題。這不是該問題的重複;我有一個更具體的問題。如何在我的if/else塊中防止這些不必要的返回?

我正試圖通過移植一些我在JavaScript中使用012xx所做的工作來學習CoffeeScript。假設$foos是一個布爾數組。我有一個CoffeeScript的功能類似於此:

$ = jQuery 

activateCats = ($foos) -> 
    $.each $foos, (idx, foo) -> 
     $bar = $(".cats").eq(idx) 
     if foo 
     $bar.addClass("ui-state-active") 
      .removeClass "ui-state-disabled" 
     else 
     $bar.removeClass("ui-state-active") 
      .addClass "ui-state-disabled" 
     # add another empty return here 
    return 

編譯JavaScript的看起來是這樣的:

var $, doThings; 

$ = jQuery; 

activateCats = function($foos) {  // Function 1 
    $.each($foos, function(idx, foo) { // Function 2 
     var $bar; 

     $bar = $(".cats").eq(idx); 
     if (foo) { 
     return $bar.addClass("ui-state-active").removeClass("ui-state-disabled"); 
     } else { 
     return $bar.removeClass("ui-state-active").addClass("ui-state-disabled"); 
     } 
    }); 
}; 

如果我不包括它編譯成這個底部的回報(請注意返回我的$.each循環前):

var $, doThings; 

$ = jQuery; 

activateCats = function($foos) { 
    return $.each($foos, function(idx, foo) { 
     var $bar; 

     $bar = $(".cats").eq(idx); 
     if (foo) { 
     return $bar.addClass("ui-state-active").removeClass("ui-state-disabled"); 
     } else { 
     return $bar.removeClass("ui-state-active").addClass("ui-state-disabled"); 
     } 
    }); 
}; 

我敢肯定,我不希望這些回報在我$.each循環。我不確定爲什麼CoffeeScript會添加它們,因爲我的函數底部有空的return。我之前在其他地方遇到過這個問題,但我讀了this thread並解決了這些問題。我已經嘗試了該線程中的各種方法,並且它們都不適用於這種邊緣情況。

如何防止CoffeeScript添加這些退貨?

+0

的[?有什麼辦法來無回用CoffeeScript的東西(可能重複http://stackoverflow.com/questions/7391493/is-there-any-way-to-not-return-something-using-coffeescript) – TheHippo

+0

此問題已被回答。 – TheHippo

+0

@TheHippo如果你閱讀這個問題的最後兩句話,你會看到我已經嘗試過這些解決方案,但他們沒有奏效。 – abdkw

回答

0

如前所述here

activateCats = ($foos) -> 
    $.each $foos, (idx, foo) -> 
     $bar = $(".cats").eq(idx) 
     if foo 
     $bar.addClass("ui-state-active") 
      .removeClass "ui-state-disabled" 
     return 
     else 
     $bar.removeClass("ui-state-active") 
      .addClass "ui-state-disabled" 
     return 
    return 

將編譯到:

var activateCats; 
activateCats = function($foos) { 
    $.each($foos, function(idx, foo) { 
    var $bar; 

    $bar = $(".cats").eq(idx); 
    if (foo) { 
     $bar.addClass("ui-state-active").removeClass("ui-state-disabled"); 
    } else { 
     $bar.removeClass("ui-state-active").addClass("ui-state-disabled"); 
    } 
    }); 
}; 
+0

對於另一個問題的答案,我不清楚CoffeScript試圖編譯一個回報的地方。它是否經常應用返回值(在循環和邏輯塊中),以便您可以選擇性地將它們關閉並返回空值? – abdkw

+0

不,你不能。正如CoffeeScript文檔所言:「一切都是表達式(至少儘可能)」。在大多數情況下,它不會造成任何傷害。 – TheHippo

+0

好吧,我是新來的語法,但我試圖弄清楚。謝謝你回答我的問題,而不是把它寫成重複。這很簡單,但對我來說這似乎與其他線程不同。 – abdkw

相關問題