【问题标题】:Rails sharing javascript between viewsRails 在视图之间共享 javascript
【发布时间】:2012-09-27 04:06:34
【问题描述】:

在我的 rails 应用程序中,我有一段 javascript 在我的 8 个视图中的 2 个之间完全重复。 javascript的正确位置在哪里?

rails 应用程序结构将 javascript 放置在 app/assets/javascripts 中,其中每个模型都有一个 js.coffee 文件和一个 application.js 文件。我是把它放在 application.js 文件中,还是有一种干净的方法可以在两个 .js 目录之间共享 javascript?

谢谢

【问题讨论】:

  • Shioyama 提供了一些很好的建议,但如果您还不熟悉如何在 javascript 中构建类类结构,那么您还有一些学习要做(尽管 coffeescript 使这变得更容易)。 application.js 文件充当清单,您可以在其中包含 javascript 的目录。一开始这对你来说可能更容易。这完全取决于您对 javascript 的熟悉程度。这可能会有所帮助 - 注意 require 和 require_tree:guides.rubyonrails.org/asset_pipeline.html
  • 对不起,我误读了这个问题!请考虑我的回答是对带有骨干网的模块化代码的介绍,但不是对此处提出的具体问题的回答。

标签: javascript ruby-on-rails-3 views coffeescript code-duplication


【解决方案1】:

更新

我完全误读了这个问题,并认为它与backbone.js 视图有关,而不是rails 视图。下面的答案确实与所要求的不同......也许它与使用backbone.js的人有关,但它并没有真正回答这个问题。很抱歉!

原始答案

我共享代码的方法是创建一个父类,在其中包含我想要共享的代码,然后让每个使用它的视图扩展该类(用 coffeescript 术语)。

类似(再次在咖啡脚本中):

app/assets/javascripts/base_view.js.coffee(或任何你想放的地方)

class App.BaseView
  sharedFunction: () ->
    ...

然后让其他视图扩展App.BaseView(或任何你称之为父类的东西):

app/assets/javascripts/views/view2.js.coffee

class App.MyView1 extends App.BaseView
  ... sharedFunction() ...

app/assets/javascripts/views/view2.js.coffee

class App.MyView2 extends App.BaseView
  ... sharedFunction() ...

只需确保在 application.rb 中的其他视图之前加载带有 App.BaseView 的文件。 (如果您使用的是 require.js,那么加载顺序当然无关紧要,但我假设您不是。)

另外请注意,虽然您提到您只是共享“一段 javascript”,但最好从一开始就考虑共享模块,这样如果以后您想扩展该“一段javascript" 你有框架来做这件事。这是a good article 使用backbone.js 实现模块。

FWIW,this is the project 我正在研究与公共视图类共享代码的地方:App.Threads 扩展 App.TranslatableFieldsView 扩展 App.BaseView。请注意,这里我正在使用咖啡脚本的super 共享初始化代码。我对模型做同样的事情。

【讨论】:

    【解决方案2】:

    我的观点是将 javascript 保留在资产中,并在需要的地方使用 javascript_include_tag 包含它 比如你把通用代码放在assets/mycode.js.cofeee

    在需要的 html 中像这样使用它

    javascript_include_tag('mycode')
    

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多