如何检查 coffeescript 中的语法错误

How to check syntax error in coffeescript

我不熟悉 coffee 脚本,我尝试将 jquery 从视图移动到资产中但无法使其工作。

这里是工作视图:

- jquery_ready do
  $('label[for=voucher_name], input#voucher_name').hide();
  $( "#voucher_voucher_provider_id" ).change(function() {
  var exist_id = $(this).val();
  var ids = $('#voucher_false_ids_')[0].value;
  if(jQuery.inArray(exist_id, ids.split(" ")) !== -1){
  $('label[for=voucher_name], input#voucher_name').hide();
  }
  else
  {
  $('label[for=voucher_name], input#voucher_name').show();
  }
  });
                                                                                                              

然后在/app/assets/javascript/mycode.js.coffee

jQuery ->
  $('label[for=voucher_name], input#voucher_name').hide();
  $( "#voucher_voucher_provider_id" ).change ->
    exist_id = $(this).val();
    ids = $('#voucher_false_ids_')[0].value;
    alert('alert');
    If(jQuery.inArray(exist_id, ids.split(" ")) !== -1)
      $('label[for=voucher_name], input#voucher_name').hide();
    else
      $('label[for=voucher_name], input#voucher_name').show();

到目前为止,我能够 运行 直到 .change -> 警报('alert'); 不是在我开始之后把所有行放在 If

之后

导致错误的原因:

ExecJS::RuntimeError at /admin
SyntaxError: [stdin]:6:51: unexpected =

帮助:正确的语法或来自 /Thanks 的错误是什么

如果您将该片段粘贴到 CoffeeScript 网站的 the "Try CoffeScript" page,它会告诉您哪里出了问题。

上面写着:

[stdin]:7:51: error: unexpected =
    If(jQuery.inArray(exist_id, ids.split(" ")) !== -1)
                                                  ^

CoffeeScript 没有 ===!== 运算符。 ==!= 在为您编译时被翻译为严格的等价物。

如果你修复它,你会得到另一个错误:

[stdin]:8:1: error: unexpected indentation
      $('label[for=voucher_name], input#voucher_name').hide();
^^^^^^

这是因为上一行。您以 If 开始 if 语句,因此 CoffeeScript 不会将其视为 if 语句,而是将其视为对 If() 函数的函数调用。

将其更改为小写字母 if 然后它就可以正常编译了。


简版,这里固定:

jQuery ->
  $('label[for=voucher_name], input#voucher_name').hide();
  $( "#voucher_voucher_provider_id" ).change ->
    exist_id = $(this).val();
    ids = $('#voucher_false_ids_')[0].value;
    alert('alert');
    if(jQuery.inArray(exist_id, ids.split(" ")) != -1)
      $('label[for=voucher_name], input#voucher_name').hide();
    else
      $('label[for=voucher_name], input#voucher_name').show();