javascript - Coffeescript 的 JS 函数,以 jQuery .map 和 Selectors 作为参数

标签 javascript jquery coffeescript

我正在将一些 JS 代码重构为 CoffeeScript,但遇到了函数问题。

这是有效的 JS:

$(".comformt_QA").change(function(){
   var array = $(".comformt_QA").map(function() {
      return $(this).val();
   }).toArray();

   $("[name='comfort_qualitative_assessment.global_comfort_index']").val(
      calc_qualitative_assessment_array(array)
   ).change();
});

我的目标是使用这个代码片段作为函数,并且能够调用:

class_to_calc_qualitative_assessment_array(".comformt_QA", "[name='comfort_qualitative_assessment.global_comfort_index']");

这是 CoffeeScript :

@class_to_calc_qualitative_assessment_array = (class_param, target) ->
   array = []
   $(class_param).change ->
      array = $(class_param).map( ->
         $(this).val()
      )
   $(target).val(calc_qualitative_assessment_array(array)).change()

数组始终为空... 想法?

最佳答案

如果将咖啡代码编译为 Javascript,结果将是:

this.class_to_calc_qualitative_assessment_array = function(class_param, target) {
  var array;
  array = [];
  $(class_param).change(function() {
    return array = $(class_param).map(function() {
      return $(this).val();
    });
  });
  return $(target).val(calc_qualitative_assessment_array(array)).change();
}; 

Coffeescript 将 @ 转译为 JS 中的 this 关键字。此外,您的函数中没有返回值 - 这会导致 CoffeeScript 返回函数的最后分配值。

也许这将是一种可行的方法:

class_to_calc_qualitative_assessment_array = (class_param, target) ->
   array = []
   $(class_param).change ->
      array = $(class_param).map( ->
         $(@).val()
      )
      return
   $(target).val(calc_qualitative_assessment_array(array)).change()
   return

转换后看起来像这样:

var class_to_calc_qualitative_assessment_array;

class_to_calc_qualitative_assessment_array = function(class_param, target) {
  var array;
  array = [];
  $(class_param).change(function() {
    array = $(class_param).map(function() {
      return $(this).val();
    });
  });
  $(target).val(calc_qualitative_assessment_array(array)).change();
};

关于javascript - Coffeescript 的 JS 函数,以 jQuery .map 和 Selectors 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29844713/

相关文章:

angularjs - 使用 CoffeeScript 和 Karma 对 AngularJS Controller 进行单元测试

javascript - 数据表日期时间插件不起作用

javascript - 防止客户端滥用/欺骗奖励用户的重复 Ajax 调用

javascript - 在嵌套函数中引用类对象时出现问题

javascript - 获取整数数组中的第一个最小自由整数键/id

Jquery - 当浏览器繁忙/加载时显示进度光标(类似于 Windows)

javascript - 即8 'Invalid Pointer'

javascript - 如何更新图像的来源

javascript - 使用 window.print() 时 Iframe 内容被剪切

javascript - 更改 Canvas 大小时保留 svg 组的大小