JavaScript to CoffeeScript Error

JavaScript to CoffeeScript Error

本文关键字:Error CoffeeScript to JavaScript      更新时间:2023-09-26

我有一个函数,当单击最后一个复选框时,它会切换所有其他复选框。

它在普通的JavaScript中完美运行:

$(document).ready(function() {
  $('#manage').click(function(event) {   
      if(this.checked) {
          $('.checkbox:checkbox').each(function() {
              this.checked = true;                        
          });
      }
      if(!this.checked) {
          $('.checkbox:checkbox').each(function() {
              this.checked = false;                        
          });
      }
  });
});

http://jsfiddle.net/PauaN/9/

但是,当我编译成 CoffeeScript(使用 http://js2coffee.org/)时,当复选框关闭时,功能会中断:

$(document).ready ->
  $("#manage").click (event) ->
    if @checked
      $(".checkbox:checkbox").each ->
        @checked = true
    unless @checked
      $(".checkbox:checkbox").each ->
        @checked = false

http://jsfiddle.net/FRs5d/7/

我认为这是因为每个循环只运行一次。

出了

什么问题?

发生两种情况:

  1. 咖啡脚本将返回放在每个函数的末尾,因此 @checked = true更改为return this.checked = true;
  2. 如果 Jquery each() 中的函数返回 false ,则不会继续。

解决这个问题的方法是更改最后一行

@checked = false

像这样:

@checked = false
return true

问题如下。在转换后的脚本中,CoffeeScript 创建的隐式返回false

unless @checked
  $(".checkbox:checkbox").each () ->
    @checked = false
    # here false is returned stopping the each function from continuing

所以解决方案是在函数末尾添加true

unless @checked
  $(".checkbox:checkbox").each () ->
    @checked = false
    true

这把小提琴在行动中展示了它。