更新:我的问题是由两个函数返回引起的,而不只是一个。 $.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添加这些退货?
答案 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");
}
});
};