Rails中的共享JS(Coffee)
Shared JS (Coffee) in Rails
如果我想在app/assets/JavaScript下的不同文件之间共享一些JavaScript函数,组织目录结构的最佳方法是什么?
假设我有共享的.js.coffee
sharedFunction = ->
'Hello '
现在,我如何在其他地方使用它?就像这里一样,在welcome.js.coffee中
welcome = (name) ->
sharedFunction() + name
如何使shared.js.cofee始终首先加载?
我试着把它放在application.js的一开始,但它没有改变任何东西。似乎共享文件加载太长,欢迎设法开始执行,并注意到未定义sharedFunction。
我是这样做的:
- 确保您需要application.js中的文件,尤其是在
require_tree
之前 - 导出函数(在我的例子中是一个类,所以它是按名称命名的)
示例:(假设我们有application.js和shared.js.coffee在同一级别)
application.js
//= require ./shared
//= require_tree .
共享.js.coffee
class MyNamespace
@mySharedFunc: () ->
doSomething()
root = exports ? this
root.MyNamespace = MyNamespace
现在,您可以通过以下方式引用MyNamespace.mySharedFunc()
,在其他coffeescript文件中轻松访问该函数
p.S.
关于导出的错误之处在这个stackoverflow问题中得到了很好的解释:我如何在CoffeeScript中定义全局变量?
在application.js
中,首先加载共享:
//= require shared
//rest of code
并且在共享中,如果必要的话,使您的变量可以全局访问:
@sharedFunction = ->
'Hello '
请注意,拥有这样的全局变量也是一种糟糕的做法,至少要尝试将它们保留在名称空间中。
基本上,以前加载的函数可以在以后使用。但在这种情况下,你的函数不起作用的原因很简单:你忘记了执行它
只需更换
sharedFunction + name
带
sharedFunction() + name
它完成了。
最好只包含一个JS文件。如果您的资产管道知道如何将它们粘贴在一起,您可以将其在不同的资产之间进行拆分,但向不同的页面发送不同的JavaScript是不可取的。发送更大的文件似乎违反直觉,尤其是对于每个页面,但缓存会让这一点发生变化:JS文件应该只加载一次。这也自动意味着您可以从任何页面访问所有功能。
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 可以't通过$getJSON上传参数使用js.coffee
- Rails中的共享JS(Coffee)
- 如何将HTML页面操作的范围限定为JS/Coffee文件中的唯一UserId
- 将coffee和js开发与Gulp相结合
- 应用<strong>标记到我的js.coffee文件中的字符串
- 如何使vim在编译.coffee时自动打开.js并保存回.js
- 带有foo.js和foo.js.coffee(空)的Rails资产管道导致js循环.为什么?
- 我如何将其转换为适合.js.coffee的jQuery格式
- 主干.js Model.get() 返回 undefined, 范围使用 coffeescript + coffee t
- 在javascript/js.coffee中访问json数据
- 使用js2coffe和bash将mass.js转换为.coffee
- 在Makefile任务期间复制.js并编译.coffee
- 用coffee文件编译js文件
- JS (Coffee-Script)在rails应用程序中不工作
- node.js, backbone, socketio, express和coffee script都在一起吗?
- 如何使用js/coffee来截屏asp页面
- Rails 4从.js.coffee视图调用CoffeeScript函数
- 如何在Coffescript .js.coffee中呈现ruby代码