我正在将一些 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/