javascript - Rails 在 View 之间共享 javascript

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

在我的 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/

相关文章:

grails - 在Grails中,通过g:set将taglib返回值传递给 View

ios - 从多个 View 访问 NSUserDefault

ruby-on-rails - 如何在 Rails View 上显示错误消息?

javascript - 视口(viewport)大小和滚动

javascript - 如何获取@对象属性的值?

ruby-on-rails-3 - 在RestClient中解析elasticsearch响应

ruby-on-rails - I18n : What is the difference between using 't(:test_key)' , 't(' test_key')' and ' t ('.test_key')'?

ruby-on-rails-3 - 在 Rails route 翻译 slug 的最佳方法是什么

javascript - Bootstrap 3 选项卡上的 jquery 点击事件

javascript - 循环中的链式 promise : Firebase read works fine, Firebase 写入不