在Rails中正确创建和调用Coffeescript函数

时间:2014-06-27 14:25:58

标签: ruby-on-rails coffeescript

我正在使用此功能返回unique values of an array

function unique(array) {
    return $.grep(array, function(el, index) {
        return index == $.inArray(el, array);
    });
}

当它被放置在视图的脚本块中时,它可以完美地工作,我将其称为:

$('#array_text').val(unique(colData).join('; '));

然而,当我"翻译"它是Coffeescript并将其放在相关的coffeescript文件中

unique = (array) ->
  $.grep array, (el, index) ->
    index is $.inArray(el, array)

虽然该函数似乎在关联的.js文件中正确呈现,

 var unique;

  unique = function(array) {
    return $.grep(array, function(el, index) {
      return index === $.inArray(el, array);
    });
  };

当我从视图的脚本块中以相同的方式调用unique时,我收到错误。

Uncaught ReferenceError: unique is not defined 

我希望unique()成为"全球"在环境中发挥作用。

1 个答案:

答案 0 :(得分:0)

rails中coffee脚本文件中定义的每个javascript函数都只限于本地文件,因此默认情况下它在文件外部不可见。如果要全局使用函数,则必须在开头用@符号定义它。

@unique = (array) ->
  $.grep array, (el, index) ->
    index is $.inArray(el, array)

现在你可以在任何地方使用它,你在脚本块中的代码应该再次工作。