在我的 Rails 应用程序中,我有一段 javascript 在我的 8 个 View 中有 2 个完全重复。放置 javascript 的正确位置在哪里?
Rails 应用程序结构将 javascript 放在 app/assets/javascripts
中,其中每个模型都有一个 js.coffee 文件和一个 application.js 文件。我是将它放在 application.js 文件中,还是有一种干净的方法在两个 .js 目录之间共享 javascript?
谢谢
最佳答案
更新:
我完全误读了这个问题并认为它是关于 backbone.js View ,而不是 rails View 。下面的答案确实与所问的有所不同……也许它与使用 backbone.js 的人有关,但它并没有真正回答这个问题。对此感到抱歉!
原始答案:
我为共享代码所做的是创建一个父类,在其中包含我想共享的代码,然后让每个使用它的 View 扩展该类(用 coffeescript 术语)。
所以类似(再次在 coffeescript 中):
app/assets/javascripts/base_view.js.coffee(或任何你想放的地方)
class App.BaseView
sharedFunction: () ->
...
然后让其他 View 扩展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() ...
只需确保包含 App.BaseView
的文件在 application.rb
中的其他 View 之前加载。 (如果您使用的是 require.js,那么加载顺序当然无关紧要,但我假设您不是。)
另请注意,虽然您提到您只是共享“一段 javascript”,但从一开始就考虑共享模块确实更好,这样如果以后您想要扩展“一段” javascript”你有框架来做到这一点。这是 a good article关于使用 backbone.js 实现模块。
FWIW,this is the project我正在研究与公共(public) View 类共享代码的地方:App.Threads
延伸App.TranslatableFieldsView
延伸 App.BaseView
.请注意,我在这里分享了使用 coffeescript 的 super
的初始化代码。我对模型做同样的事情。
关于javascript - Rails 在 View 之间共享 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12755762/