如何在if / else块中阻止这些不需要的返回?

时间:2013-05-16 14:28:28

标签: jquery coffeescript

更新:我的问题是由两个函数返回引起的,而不只是一个。 $.each循环中的回调函数正在if/else块中生成返回值。即使我稍后在问题中链接它,但当CoffeeScript编译为JavaScript时,有一个关于how to override returns的好问题。这不是那个问题的重复;我有一个更具体的问题。

我正在尝试通过移植我使用jQuery Widget Factory在JavaScript中完成的一些工作来学习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添加这些退货?

1 个答案:

答案 0 :(得分: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");
    }
  });
};