我在 app/assets/javascripts/custom.js 中创建了一个带有函数定义的小型自定义 javascript 文件
round_number = function(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
};
该应用程序运行良好,因为该文件已插入到资产管道中。然后,出于学习目的,我将其转换为 coffescript:
round_number = (num, dec) ->
Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec)
但令我惊讶的是,该应用程序不起作用。我在 localhost:3000/assets/custom.js 中检查了 coffescript 被翻译成:
(function() {
var round_number;
round_number = function(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
};
}).call(this);
为什么额外的包装,使功能在我需要的地方不可用?
如果我不是在 custom.js.coffee 文件中插入 coffescript 函数,而是在 app/assets/javascripts/orders.js.coffee (其中 Order 是我的类)中,它将被翻译成预期的 javascript。
我想把共享的 javascript 函数放在一个单独的文件中,因为它更有序。我知道,即使我将函数放在 orders.js.coffee 中,它也会在整个应用程序中可用(这就是我想要完成的),但我很困惑。我在这里缺少最佳实践吗?
- - 编辑 - -
我从Rails 3.1 和 Coffeescript 的“找不到变量”错误中了解到
我想我会以这种方式组织我的 Rails 应用程序:
1) 创建文件 app/assets/javascripts/global.js.coffee 以包含所有全局变量和函数。在这个文件中放一行
window.Global ||= {}
定义一个命名空间 Global。将函数定义为
Global.function_name = (arguments) ->
...
2)调用函数:
Global.function_name(arguments)