我在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中,它也可以在整个应用程序中使用(这就是我想要完成的),但我很困惑。 我在这里缺少最佳实践吗?
---编辑---
我从"Can't find variable" error with Rails 3.1 and Coffeescript了解
我认为我将以这种方式组织我的Rails应用程序:
1)创建一个文件app / assets / javascripts / global.js.coffee以包含所有全局变量和函数。在这个文件中放一行
window.Global ||= {}
定义命名空间Global。将功能定义为
Global.function_name = (arguments) ->
...
2)用以下方法调用函数:
Global.function_name(arguments)
答案 0 :(得分:0)
是的,如果您想要全局可用的内容,请将其设置为window
上的属性。 Coffeescript编译器将您的代码包装在一个匿名函数中,以防止意外的名称冲突。