3

私の Rails アプリケーションには、8 つのビューのうち 2 つの間で正確に重複する JavaScript があります。JavaScriptを配置する適切な場所はどこですか?

Rails アプリケーション構造app/assets/javascriptsでは、各モデルの js.coffee ファイルと application.js ファイルがある場所に javascript を配置します。それをapplication.jsファイルに配置しますか、それとも2つの.jsディレクトリ間でjavascriptを共有するきれいな方法がありますか?

ありがとう

4

2 に答える 2

1

更新

私はこの質問を完全に読み間違え、それはRailsビューではなく、backbone.jsビューに関するものだと思いました。以下の答えは、実際に尋ねられたものとは異なるものです...多分それはbackbone.jsを使用している人々に関連するでしょうが、それは実際にはこの質問に答えません。申し訳ありません!

元の回答

コードを共有するために私が行うことは、親クラスを作成し、そこに共有したいコードを含め、それを使用する各ビューにそのクラスを拡張させることです(coffeescriptの用語で)。

だから(再び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() ...

のファイルが。App.BaseViewの他のビューの前にロードされていることを確認してapplication.rbください。(require.jsを使用している場合、ロードの順序はもちろん重要ではありませんが、そうではないと思います。)

また、メモとして、「JavaScriptの一部」のみを共有しているとおっしゃっていますが、共有モジュールの観点から最初から考える方がよいので、後でその「JavaScriptの一部」を拡張したい場合はそれを行うためのフレームワークを持っています。これは、 backbone.jsを使用したモジュールの実装に関する優れた記事です。

FWIW、これは私が取り組んでいるプロジェクトで、コードを一般的なビュークラスと共有しています: App.Threadsextendswhichextends 。ここで、coffeescriptを使用して初期化コードを共有していることに注意してください。モデルについても同じことをします。App.TranslatableFieldsViewApp.BaseViewsuper

于 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 に答える