3

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

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

谢谢

4

2 回答 2

1

更新

我完全误读了这个问题,并认为它与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.BaseViewapplication.rb. (如果您使用的是 require.js,那么加载顺序当然无关紧要,但我假设您不是。)

另请注意,尽管您提到您只共享“一段 javascript”,但最好从一开始就考虑共享模块,这样如果以后您想扩展该“一段 javascript”,您有框架去做。这是一篇关于使用backbone.js 实现模块的好文章

FWIW,这是我正在从事的项目,我在其中与公共视图类共享代码:App.Threadsextends App.TranslatableFieldsViewwhich extends App.BaseView。请注意,这里我正在使用 coffeescript 共享初始化代码super。我对模型做同样的事情。

于 2012-10-06T02:34:06.300 回答
1

我的观点是将该javascript保留在资产中并javascript_include_tag在需要的地方包含它例如您已将通用代码放入assets/mycode.js.cofeee

在需要的地方在你的 html 中使用它

javascript_include_tag('mycode')

谢谢

于 2012-10-06T02:37:32.660 回答