Rails 中的共享 JS(咖啡)

Posted

技术标签:

【中文标题】Rails 中的共享 JS(咖啡)【英文标题】:Shared JS (Coffee) in Rails 【发布时间】:2013-12-31 22:34:42 【问题描述】:

如果我想在 app/assets/javascript 下的不同文件之间共享一些 JavaScript 函数,那么组织目录结构的最佳方法是什么?

假设我有 shared.js.coffee

sharedFunction = ->
  'Hello '

现在,我如何在其他地方使用它?就像这里一样,在 welcome.js.coffee

welcome = (name) ->
  sharedFunction() + name

我怎样才能让shared.js.cofee 总是先加载

我试图把它放在 application.js 的最开始,但它并没有改变任何东西。似乎 shared 文件加载时间过长,welcome 设法开始执行并注意到 sharedFunction 未定义。

【问题讨论】:

【参考方案1】:

application.js,先加载共享:

//= require shared
//rest of code

如果有必要,在共享中,让您的变量可以全局访问:

@sharedFunction = ->
  'Hello '

请注意,使用此类全局变量也是一种不好的做法,至少尝试将它们保留在命名空间中。

【讨论】:

那个全局变量标签成功了!所以在我看来,每个 js.coffee 文件都与其他文件分开。将 sharedFunction 放入常规的 .js 文件中也可以。我很困惑。 是的,它是coffeescript的基础,每个文件都包装在一个函数中。您必须明确说明应该全局访问的内容 我可以在这个包装函数之外使用 sharedFunction 而不使其成为全局变量吗? 使用 //require 可以解决问题,但是在全局命名空间中有一个工具集是可以的【参考方案2】:

最好只包含一个 JS 文件。如果您的资产管道知道如何将它们粘贴在一起,您可以将其拆分为不同的资产,但将不同的 JavaScript 发送到不同的页面就逊色了。发送更大的文件似乎违反直觉,尤其是对于每个页面,但缓存会改变这一点:您的 JS 文件应该只加载一次。这也自动意味着您可以从任何页面访问所有功能。

【讨论】:

【参考方案3】:

基本上之前加载的函数可以稍后使用。但在这种情况下,您的函数不起作用的原因很简单:您忘记执行它。

简单替换

sharedFunction + name

sharedFunction() + name

它已经完成了。

【讨论】:

对不起,这是我在示例中的错误,但不是真正的问题。无论如何,谢谢你注意到了:)【参考方案4】:

我是这样做的:

确保您首先需要 application.js 中的文件,尤其是在 require_tree 之前 导出函数(在我的例子中是一个类,所以它是命名空间的)

示例:(假设我们在同一级别有 application.js 和 shared.js.coffee)

application.js

//= require ./shared
//= require_tree .

shared.js.coffee

class MyNamespace
  @mySharedFunc: () ->
    doSomething()

root             = exports ? this
root.MyNamespace = MyNamespace

您现在可以通过MyNamespace.mySharedFunc()MyNamespace.mySharedFunc()这种方式在您的其他咖啡脚本文件中轻松访问该函数

附言

这个 *** 问题很好地解释了出口的神秘之处:How do I define global variables in CoffeeScript?

【讨论】:

最后两行到底是做什么的?我刚刚在研究 Coffee 命名空间,并看到了以下定义命名空间 window.MyNamespace = 的方式。这里也一样吗? 当我输入 P.S. 时,请阅读此链接:***.com/questions/4214731/…

以上是关于Rails 中的共享 JS(咖啡)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 rails 对咖啡脚本文件使用 .js.coffee 扩展名,因为它们无论如何都不能包含 JavaScript 代码?

CoffeeScript - 如何在 ruby​​ on rails 中使用咖啡脚本?

rails,使用咖啡脚本出现语法错误

如何在 Rails 5 上禁用咖啡脚本

构建咖啡脚本代码?

Rails 3 咖啡处理程序丢失