在我的 rails 应用程序中,我有一段 javascript 在我的 8 个视图中的 2 个之间完全重复。javascript的正确位置在哪里?
rails 应用程序结构将 javascript 放置app/assets/javascripts
在每个模型的 js.coffee 文件和 application.js 文件的位置。我是将它放在 application.js 文件中还是有一种干净的方法可以在两个 .js 目录之间共享 javascript?
谢谢
在我的 rails 应用程序中,我有一段 javascript 在我的 8 个视图中的 2 个之间完全重复。javascript的正确位置在哪里?
rails 应用程序结构将 javascript 放置app/assets/javascripts
在每个模型的 js.coffee 文件和 application.js 文件的位置。我是将它放在 application.js 文件中还是有一种干净的方法可以在两个 .js 目录之间共享 javascript?
谢谢
更新:
我完全误读了这个问题,并认为它与backbone.js 视图有关,而不是rails 视图。下面的答案确实与所要求的不同......也许它与使用backbone.js的人有关,但它并没有真正回答这个问题。对于那个很抱歉!
原始答案:
我共享代码的做法是创建一个父类,在其中包含我想要共享的代码,然后让每个使用它的视图扩展该类(用 coffeescript 术语)。
所以像(再次在coffeescript中):
app/assets/javascripts/base_view.js.coffee(或任何你想放的地方)
class App.BaseView
sharedFunction: () ->
...
然后让其他视图扩展App.BaseView
(或任何你称之为父类的东西):
应用程序/资产/javascripts/views/view2.js.coffee
class App.MyView1 extends App.BaseView
... sharedFunction() ...
应用程序/资产/javascripts/views/view2.js.coffee
class App.MyView2 extends App.BaseView
... sharedFunction() ...
只需确保App.BaseView
在application.rb
. (如果您使用的是 require.js,那么加载顺序当然无关紧要,但我假设您不是。)
另请注意,尽管您提到您只共享“一段 javascript”,但最好从一开始就考虑共享模块,这样如果以后您想扩展该“一段 javascript”,您有框架去做。这是一篇关于使用backbone.js 实现模块的好文章。
FWIW,这是我正在从事的项目,我在其中与公共视图类共享代码:App.Threads
extends App.TranslatableFieldsView
which extends App.BaseView
。请注意,这里我正在使用 coffeescript 共享初始化代码super
。我对模型做同样的事情。
我的观点是将该javascript保留在资产中并javascript_include_tag
在需要的地方包含它例如您已将通用代码放入assets/mycode.js.cofeee
在需要的地方在你的 html 中使用它
javascript_include_tag('mycode')
谢谢