Javascript 到 Coffeescript

Javascript to Coffeescript

所以我有这个javascript它自己工作

function update_checkboxes()
      {
        var part_array = [];
        $("input#edit:checked").parents('td').next().each(function(){
          part_id = $(this).text();
          part_array.push(part_id);
        });
        $("input#participant_ids").val(JSON.stringify(part_array));
      }

我转换为 coffeescript

update_checkboxes = ->
    part_array = []
    $("input#edit:checked").parents("td").next().each ->
      part_id = $(this).text()
      part_array.push part_id

    $("input#participant_ids").val JSON.stringify(part_array)

问题是当我执行 rails rake assets:precompile 时,它编译正常但在 Firebug 中我给出错误

ReferenceError: part_array is not defined

$("input#participant_ids").val(JSON.stringify(part_array));

因为 part_array 在不同的块中定义。

update_checkboxes = function() {
    var part_array;
    return part_array = [];
  };

  $("input#edit:checked").parents("td").next().each(function() {
    var part_id;
    part_id = $(this).text();
    return part_array.push(part_id);
  });

  $("input#participant_ids").val(JSON.stringify(part_array));

}).call(this); 

我做错了什么?

请记住,在 CoffeeScript 中,缩进 很重要 ,您不能可靠地混合使用空格和制表符。

此 CoffeeScript,其中缩进已标准化为两个空格:

update_checkboxes = ->
  part_array = []
  $("input#edit:checked").parents("td").next().each ->
    part_id = $(this).text()
    part_array.push part_id

  $("input#participant_ids").val JSON.stringify(part_array)

结果JavaScript:

var update_checkboxes;
update_checkboxes = function() {
  var part_array;
  part_array = [];
  $("input#edit:checked").parents("td").next().each(function() {
    var part_id;
    part_id = $(this).text();
    return part_array.push(part_id);
  });
  return $("input#participant_ids").val(JSON.stringify(part_array));
};

...不会以在单独的块中定义的 part_array 结束。

你的缩进必须关闭。我将问题中的 exact coffeescript 粘贴到 js2coffee

update_checkboxes = ->
    part_array = []
    $("input#edit:checked").parents("td").next().each ->
      part_id = $(this).text()
      part_array.push part_id

    $("input#participant_ids").val JSON.stringify(part_array)

并收到...

var update_checkboxes;

update_checkboxes = function() {
  var part_array;
  part_array = [];
  $("input#edit:checked").parents("td").next().each(function() {
    var part_id;
    part_id = $(this).text();
    return part_array.push(part_id);
  });
  return $("input#participant_ids").val(JSON.stringify(part_array));
};

这是正确的。 Whosebug 必须在您粘贴缩进时规范化缩进。看看原文,修正缩进不匹配的问题