3

Rails 3.0.20 から Rails 3.1.10 への久々のアップグレードを行っています。(後で 3.2 にアップグレードしますが、最初に 3.1 でのより大きな変更を自分のコードベースで動作させたいと考えています。テスト スイートを持っていないので、かなりの技術的負債を克服しているので、ご容赦ください。ありがたいことに、このアプリはそれほど大きくも複雑でもありません。)

私は常に、アプリのさまざまなビューに対して個別の JS ファイルを持っていました。ここで、Asset Pipeline はこれらすべてを 1 つのファイルに結合したいと考えています。問題は、多くの変数と関数名が衝突し、通常は問題を引き起こすことです。

ここで何らかの名前空間を使用し、それを必要とするページの特定の名前空間でコードを初期化する必要があると思います。

これを行う標準的な方法はありますか?または、全体的により良い方法はありますか?

明確にするためのメモ: 私はまだ CoffeeScript に切り替える準備ができていません。

4

2 に答える 2

4

アセット パイプラインの要はマニフェスト ファイルです。デフォルトでは、Rails は JavaScript ファイル用に 1 つ作成します。

app/assets/javascripts/application.js

このマニフェストは、ディレクティブを使用してアセット ソース ファイルの依存関係を宣言します。これらのディレクティブの 1 つは、

require_tree

これは require directory のように機能しますが、すべてのサブディレクトリ内のすべてのファイルを再帰的に要求します。私のRailsアプリケーションでは、生成されたapplication.js含まれるもの

//= require_tree .

これには、JavaScript アセット フォルダー内のすべてのファイルが必要です。これを削除すると、すべての JavaScript ファイルが 1 つに結合されるわけではなくなります。次に、ビューごとに JavaScript ファイルを要求する必要があります。これは、Rails のビューごとの JavaScript ファイルに関する質問で回答されています。


そうは言っても、あなたの計画を再考してください。結局のところ、Rails がこれを行うのは、あなたを困らせるためではなく、目的があるからです。効率上の理由から、HTTP リクエストはできるだけ少なくする必要があります。すべての JavaScript コードが事前にロードされると、たとえばキャッシングにより、パフォーマンスが向上する可能性があります。

于 2013-05-08T21:15:14.740 に答える
0

アセット パイプラインでは、ビューごとに個別の js ファイルを使用できます。app/assets/javascripts では、ビューごとに個別の js ファイルを持つことができます。モデルの本や雑誌を持っているとしましょう。app/assets/javascripts では、モデル/ビューごとに books.js と magazines.js (またはコーヒー) を使用できます。

また、 http://railscasts.com/episodes/282-upgrading-to-rails-3-1を見ていない場合は、見てください。

于 2013-04-09T12:55:50.360 に答える