389

私の理解では、すべてのJavaScriptが1つのファイルにマージされます。Railsは、マニフェストファイル//= require_tree .の最後に追加するときに、デフォルトでこれを行います。application.js

これは実際の命の恩人のように聞こえますが、ページ固有のJavaScriptコードについて少し心配しています。このコードはすべてのページで実行されますか?最後に必要なのは、1ページでのみ必要な場合に、すべてのオブジェクトをすべてのページでインスタンス化することです。

また、コードが衝突する可能性もありませんか?

scriptまたは、ページの下部に、ページのjavascriptコードを実行するメソッドを呼び出すだけの小さなタグを付けますか?

では、require.jsはもう必要ありませんか?

ありがとう

編集:私はすべての答えに感謝します...そして私は彼らが本当に問題に取り組んでいるとは思いません。それらのいくつかはスタイリングに関するものであり、関連していないようです...そして他の人はただ言及していjavascript_include_tagます...私が知っていることは(明らかに...)ですが、今後のRails3.1の方法はすべてをまとめることであるように見えます各ページの下部に個別のJavaScriptをロードするのではなく、JavaScriptを1つのファイルにロードします。

私が思いつくことができる最善の解決策は、特定の機能をsまたはesのdivタグでラップすることです。JavaScriptコードでは、またはがページ上にあるかどうかを確認し、ある場合は、それに関連付けられているJavaScriptコードを実行します。このように、動的要素がページにない場合、JavaScriptコードは実行されません。これは、Sprocketsによってパッケージ化された大量のファイルに含まれている場合でも同様です。idclassidclassapplication.js

上記のソリューションには、100ページのうち8ページに検索ボックスが含まれている場合、それらの8ページでのみ実行されるという利点があります。また、サイトの8ページに同じコードを含める必要はありません。実際、サイトに手動のスクリプトタグを含める必要はもうありません。

これが私の質問に対する実際の答えだと思います。

4

29 に答える 29

156

Asset Pipeline のドキュメントでは、コントローラー固有の JS を実行する方法が提案されています。

たとえば、ProjectsControllerが生成された場合、 に新しいファイルがapp/assets/javascripts/projects.js.coffeeあり、 に別のファイルがありますapp/assets/stylesheets/projects.css.scss。コントローラに固有の JavaScript または CSS は、それぞれのアセット ファイル内に配置する必要があります。これらのファイルは、<%= javascript_include_tag params[:controller] %>またはなどの行でこれらのコントローラ専用にロードできるため<%= stylesheet_link_tag params[:controller] %>です。

リンク先: asset_pipeline

于 2011-08-11T21:25:54.607 に答える
77

ページ固有の js については、Garber-Irish solutionを使用できます。

したがって、Rails の javascripts フォルダーは、2 つのコントローラー (cars と users) に対して次のようになります。

javascripts/
├── application.js
├── init.js
├── markup_based_js_execution
├── cars
│   ├── init .js
│   ├── index.js
│   └── ...
└── users
    └── ...

また、javascript は次のようになります。

// application.js

//= 
//= require init.js
//= require_tree cars
//= require_tree users

// init.js

SITENAME = new Object();
SITENAME.cars = new Object;
SITENAME.users = new Object;

SITENAME.common.init = function (){
  // Your js code for all pages here
}

// cars/init.js

SITENAME.cars.init = function (){
  // Your js code for the cars controller here
}

// cars/index.js

SITENAME.cars.index = function (){
  // Your js code for the index method of the cars controller
}

markup_based_js_execution には、UTIL オブジェクトのコードと、DOM 対応の UTIL.init 実行に関するコードが含まれます。

そして、これをレイアウトファイルに入れることを忘れないでください:

<body data-controller="<%= controller_name %>" data-action="<%= action_name %>">

data-*また、より良いページ固有の css のために、属性の代わりにクラスを使用する方が良いと思います。Jason Garber が言及したように: ページ固有の CSS セレクターは非常に扱いにくくなる可能性があります (data-*属性を使用する場合) 。

これがお役に立てば幸いです。

于 2011-07-31T20:23:25.127 に答える
65

あなたは自分の質問に答えているようですが、別のオプションがあります:

基本的に、あなたはそれを仮定しています

//= require_tree .

必要とされている。そうではありません。お気軽に削除してください。私の現在のアプリケーションでは、正直なところ 3.1.x で最初にやっているのですが、3 つの異なる最上位 JS ファイルを作成しました。私のapplication.jsファイルには

//= require jquery
//= require jquery_ujs
//= require_directory .
//= require_directory ./api
//= require_directory ./admin

このようにして、必要なものだけを含む独自の最上位 JS ファイルを含むサブディレクトリを作成できます。

キーは次のとおりです。

  1. 削除require_treeできます - Rails では、Rails の想定を変更できます
  2. 名前に特別なものはありません。サブディレクトリapplication.js内のどのファイルにも、assets/javascriptプリプロセッサ ディレクティブを含めることができます。//=

それが助けになり、ClosureCowboyの答えにいくつかの詳細を追加することを願っています.

スジャル

于 2011-11-09T17:59:06.417 に答える
41

別のオプション: ページ固有またはモデル固有のファイルを作成するには、フォルダー内にディレクトリを作成できassets/javascripts/ます。

assets/javascripts/global/
assets/javascripts/cupcakes
assets/javascripts/something_else_specific

メインのapplication.jsマニフェスト ファイルは、 からファイルをロードするように構成できますglobal/。特定のページまたはページのグループは、独自の特定のディレクトリからファイルをロードする独自のマニフェストを持つことができます。Sprockets は、によってロードされたファイルをページ固有のファイルと自動的に結合しますapplication.js。これにより、このソリューションが機能します。

このテクニックstyle_sheets/も同様に使用できます。

于 2011-06-18T14:39:59.753 に答える
23

私はすべての答えに感謝しています...そして、彼らが本当に問題を抱えているとは思いません。それらのいくつかはスタイリングに関するもので、関連していないようです...そして他のものはjavascript_include_tag...私が存在することを知っているだけです(明らかに...)が、Rails 3.1の今後の方法は、各ページの下部に個々の Javascript をロードするのではなく、JavaScript を 1 つのファイルにまとめます。

私が思いつく最善の解決策は、特定の機能をs またはesのdivタグでラップすることです。JavaScriptコードで。次に、またはがページにあるかどうかを確認し、ある場合は、それに関連付けられている JavaScript コードを実行します。この方法では、動的要素がページにない場合、 Sprockets によってパッケージ化された大量のファイルに含まれていても、JavaScript コードは実行されません。idclassidclassapplication.js

上記のソリューションには、検索ボックスが 100 ページのうち 8 ページに含まれている場合、それらの 8 ページでのみ実行されるという利点があります。また、サイトの 8 ページに同じコードを含める必要もありません。実際、データをプリロードする場合を除いて、手動のスクリプト タグをサイトに含める必要はもうありません。

これが私の質問に対する実際の答えだと思います。

于 2011-05-30T00:07:43.543 に答える
16

このパーティーに来るのが少し遅れたことに気づきましたが、最近使用しているソリューションを投入したいと思いました. ただし、最初に申し上げておきます...

Rails 3.1/3.2 Way (いいえ、私は好きではありません。)

参照: http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline

この回答に完全を期すために、また実行不可能な解決策ではないため、以下を含めています...あまり気にしませんが。

「Rails Way」は、この質問の元の作成者が要求したビュー指向ではなく、コントローラー指向のソリューションです。それぞれのコントローラーにちなんで名付けられたコントローラー固有の JS ファイルがあります。これらのファイルはすべて、application.js の require ディレクティブのいずれにもデフォルトで含まれていないフォルダー ツリーに配置されます。

コントローラー固有のコードを含めるために、以下がビューに追加されます。

<%= javascript_include_tag params[:controller] %>

私はこの解決策を嫌いますが、そこにあり、迅速です。おそらく、代わりにこれらのファイルを「people-index.js」や「people-show.js」などと呼び"#{params[:controller]}-index"、ビュー指向のソリューションなどを使用することもできます。繰り返しますが、簡単に修正できますが、私にはうまくいきません。

私のデータ属性の方法

私を狂ったように呼んでください。しかし、デプロイするときに、すべての JS をコンパイルして application.js に縮小したいと考えています。これらの小さなストラグラー ファイルをあちこちに含めることを忘れないようにしたいのです。

すべての JS を 1 つのコンパクトな、近々ブラウザーにキャッシュされるファイルにロードします。ページで application.js の特定の部分を起動する必要がある場合は、Rails ではなく、HTML に指示させます。

JS を特定の要素 ID にロックしたり、HTML にマーカー クラスを散らかしたりするのではなく、 というカスタム データ属性を使用しますdata-jstags

<input name="search" data-jstag="auto-suggest hint" />

各ページで、優先 JS ライブラリ メソッドをここに挿入して、DOM の読み込みが完了したときにコードを実行します。このブートストラップ コードは、次のアクションを実行します。

  1. でマークされた DOM 内のすべての要素を反復処理します。data-jstag
  2. 要素ごとに、属性値をスペースで分割し、タグ文字列の配列を作成します。
  3. タグ文字列ごとに、そのタグのハッシュでルックアップを実行します。
  4. 一致するキーが見つかった場合は、それに関連付けられている関数を実行し、要素をパラメーターとして渡します。

たとえば、application.js のどこかに次のように定義されているとします。

function my_autosuggest_init(element) {
  /* Add events to watch input and make suggestions... */
}

function my_hint_init(element) {
  /* Add events to show a hint on change/blur when blank... */
  /* Yes, I know HTML 5 can do this natively with attributes. */
}

var JSTags = {
  'auto-suggest': my_autosuggest_init,
  'hint': my_hint_init
};

ブートストラップ イベントは、検索入力に対してmy_autosuggest_initandmy_hint_init関数を適用し、ユーザーが入力している間に提案のリストを表示する入力に変換し、入力が空白のままでフォーカスされていない場合に何らかの入力ヒントを提供します。

一部の要素が でタグ付けされていない限りdata-jstag="auto-suggest"、自動提案コードは起動しません。ただし、それは常にそこにあり、縮小され、最終的にはページで必要なときに application.js にキャッシュされます。

タグ付けされた JS 関数に追加のパラメーターを渡す必要がある場合は、創造力を働かせる必要があります。data-paramter 属性を追加するか、ある種のパラメーター構文を考え出すか、ハイブリッド アプローチを使用することもできます。

コントローラー固有の複雑なワークフローがある場合でも、lib フォルダーにファイルを作成し、それを application.js にパックして、「new-thing-wizard」などのタグを付けるだけです。ブートストラップがそのタグに到達すると、素敵で凝ったウィザードがインスタンス化されて実行されます。必要に応じてそのコントローラーのビューに対して実行されますが、それ以外の場合はコントローラーに結合されません。実際、ウィザードを正しくコーディングすれば、すべての構成データをビューで提供できる可能性があるため、後でウィザードを必要とする他のコントローラーにウィザードを再利用できる可能性があります。

とにかく、これは私がしばらくの間ページ固有の JS を実装してきた方法であり、単純なサイト設計とより複雑でリッチなアプリケーションの両方に役立ちました。ここで提示した 2 つの解決策 (私の方法または Rails の方法) のいずれかが、将来この質問に出くわした人にとって役立つことを願っています。

于 2012-01-24T18:13:09.083 に答える
7

これはずっと前に回答され、受け入れられましたが、これらの回答のいくつかとRails 3+の経験に基づいて独自のソリューションを思いつきました.

アセット パイプラインは優れています。これを使って。

まず、application.jsファイルで、削除します//= require_tree.

次にapplication_controller.rb、ヘルパー メソッドを作成します。

helper_method :javascript_include_view_js //Or something similar

def javascript_include_view_js
    if FileTest.exists? "app/assets/javascripts/"+params[:controller]+"/"+params[:action]+".js.erb"
        return '<script src="/assets/'+params[:controller]+'/'+params[:action]+'.js.erb" type="text/javascript"></script>'
    end
end

次に、application.html.erbレイアウト ファイルで、既存の JavaScript インクルードの中に新しいヘルパーを追加し、接頭辞としてヘルパーを追加しますraw

<head>
    <title>Your Application</title>
    <%= stylesheet_link_tag "application", :media => "all" %>
    <%= javascript_include_tag "application" %>
    <%= raw javascript_include_view_js %>
</head>

ほら、レールの他の場所で使用するのと同じファイル構造を使用して、ビュー固有の JavaScript を簡単に作成できるようになりました。ファイルを差し込むだけapp/assets/:namespace/:controller/action.js.erbです。

それが他の誰かを助けることを願っています!

于 2012-10-15T20:27:05.147 に答える
6
<%= javascript_include_tag params[:controller] %>
于 2013-03-21T08:34:16.330 に答える
6

レイアウト ファイル (例: application.html.erb) に次の行を追加して、コントローラー固有の JavaScript ファイル (コントローラーを生成したときに作成されたファイル) を自動的に読み込むことができます。

<%= javascript_include_tag params[:controller] %>

アクションごとにスクリプト ファイルを自動的にロードする行を追加することもできます。

<%= javascript_include_tag params[:controller] + "/" + params[:action] %>

コントローラー名にちなんで名付けられたサブディレクトリにページ スクリプトを配置するだけです。これらのファイルには、=require を使用して他のスクリプトを含めることができます。ブラウザで 404 エラーが発生しないように、ファイルが存在する場合にのみファイルを含めるヘルパーを作成するとよいでしょう。

于 2012-06-30T22:48:58.140 に答える
6

おそらく、適切なソリューションとしてpluggable_js gemが見つかるでしょう。

于 2013-07-25T13:22:04.470 に答える
5

LoadJS gem は別のオプションです。

LoadJS は、Sprockets が提供する魔法を失うことなく、ページ固有の Javascript コードを Rails アプリにロードする方法を提供します。すべての Javascript コードは引き続き 1 つの Javascript ファイルに縮小されますが、その一部は特定のページに対してのみ実行されます。

https://github.com/guidomb/loadjs

于 2013-05-02T10:38:23.730 に答える
3

フィリップの答えはかなり良いです。これを機能させるコードは次のとおりです。

application.html.erb で:

<body class="<%=params[:controller].parameterize%>">

コントローラーがプロジェクトと呼ばれると仮定すると、以下が生成されます。

<body class="projects">

次に、projects.js.coffee で:

jQuery ->
  if $('body.projects').length > 0  
     $('h1').click ->
       alert 'you clicked on an h1 in Projects'
于 2011-07-15T00:50:12.350 に答える
2

私はあなたの答えに同意します。そのセレクターがそこにあるかどうかを確認するには、次を使用します。

if ($(selector).length) {
    // Put the function that does not need to be executed every page
}

(誰も実際の解決策を追加するのを見ませんでした)

于 2012-08-15T02:47:30.867 に答える
2

JavaScriptは、Rails(Sprocketsではなく)にマージするように指示した場合にのみマージされます。

于 2011-05-29T12:53:14.310 に答える
2

js をフォルダーにグループ化し、引き続きアセット パイプラインを使用して、ページに応じて選択的に JavaScript を読み込むこともできます。

于 2012-08-15T18:43:09.850 に答える
2

これは私がスタイリングの問題を解決した方法です: (Hamlを許してください)

%div{:id => "#{params[:controller].parameterize} #{params[:view]}"}
    = yield

このようにして、すべてのページ固有の.css.sassファイルを次のように開始します。

#post
  /* Controller specific code here */
  &#index
    /* View specific code here */
  &#new
  &#edit
  &#show

これにより、衝突を簡単に回避できます。.js.coffeeファイルに関しては、次のような要素を初期化できます。

$('#post > #edit') ->
  $('form > h1').css('float', 'right')

これがいくつかの助けになることを願っています。

于 2011-05-29T15:48:39.483 に答える
2

本当にすべてをまとめてあなたのためにレイアウトする答えは見当たりません。したがって、meleyalsujalClosureCowboy )、 Ryan の回答の最初の部分、さらには Backbone.js に関するGal の大胆な声明をすべてまとめて、短く明確にしようと思います。そして、マーネン・ライボー・コーザーの要求を満たすことさえできるかもしれません。

編集例

assets/javascripts/ application.js

//= require jquery
//= require jquery_ujs
//= require lodash.underscore.min
...


ビュー/レイアウト/ application.html.erb

  ...
  </footer>

  <!-- Javascripts ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  <%= javascript_include_tag "application" %>
  <%= yield :javascript %>

</body>
</html>


ビュー/foo/index.html.erb

...
<% content_for :javascript do %>
  <%= javascript_include_tag params[:controller] %>
<% end %>


assets/javascripts/ foo.js

//= require moment
//= require_tree ./foostuff


assets/javascripts/foostuff/ foothis.js.coffee

alert "Hello world!"


簡単な説明

  • application.js//= require_tree .から削除し、各ページが共有する JS のみをリストします。

  • 上記のapplication.html.erbの 2 行は、application.js とページ固有の JS を含める場所をページに指示します。

  • 上記のindex.html.erbの 3 行は、ページ固有の JS を探して、「:javascript」(または任意の名前) という名前の yield 領域に含めるようビューに指示します。この例では、コントローラは「foo」であるため、Rails はアプリケーション レイアウトの :javascript の yield 領域に「foo.js」を含めようとします。

  • ページ固有の JS をfoo.js (またはコントローラーの名前) にリストします。共通ライブラリ、ツリー、ディレクトリなどを一覧表示します。

  • ページ固有のカスタム JS は、他のカスタム JS とは別に簡単に参照できる場所に保管してください。この例では、foo.js は foostuff ツリーを必要とするため、 foothis.js.coffee などのカスタム JS をそこに配置します

  • ここには難しいルールはありません。必要に応じて、さまざまなレイアウトでさまざまな名前の複数の歩留まり領域を作成することもできます。これは、可能性のある最初の一歩を示しているにすぎません。(Backbone.js を使用しているため、このようにはしません。foo.js を foostuff の代わりに foo というフォルダーにドロップすることを選択することもできますが、まだ決定していません。)

ノート

CSSでも同様のことができます<%= stylesheet_link_tag params[:controller] %>が、これは質問の範囲を超えています。

ここで明らかなベスト プラクティスを見逃した場合は、メモを送ってください。適応を検討します。Rails は私にとってかなり新しいものであり、正直なところ、Rails がエンタープライズ開発にデフォルトでもたらすカオスと、平均的な Rails プログラムが生成するすべてのトラフィックに、今のところそれほど感銘を受けていません。

于 2014-07-28T16:07:56.010 に答える
1

ryguyの答えは、ネガティブポイントの土地に反対票を投じられたとしても、良い答えです。

特にBackboneJSのようなものを使用している場合は、各ページに独自のBackboneビューがあります。次に、erbファイルには、適切なバックボーンビュークラスを起動する1行のインラインJavaScriptが含まれています。私はそれを「グルーコード」の1行と考えているので、そのインラインは問題ありません。利点は、ブラウザがすべてのjavascriptをキャッシュできるようにする「require_tree」を保持できることです。

show.html.erbには、次のようなものがあります。

<% provide :javascript do %>
  <%= javascript_include_tag do %>
    (new app.views.ProjectsView({el: 'body'})).render();
  <% end %>
<% end do %>

レイアウトファイルには、次のものが必要です。

<%= yield :javascript %>
于 2012-10-21T06:06:31.617 に答える
1

すべての共通 JS ファイルを「app/assets/javascript/global」などのサブフォルダーに移動してから、application.js の//= require_tree .行を//= require_tree ./global.

これで、コントローラー固有の JS を「app/assets/javascript/」ルートに自由に置くことができます。これらはコンパイル済みの JS には含まれず= javascript_include_tag、コントローラー/ビューで呼び出すときにのみ使用されます。

于 2012-10-25T17:19:15.430 に答える
1

ステップ1。require_tree を削除します。あなたのapplication.jsとapplication.cssで。

ステップ2。レイアウトフォルダーで application.html.erb (レールのデフォルト) を編集します。以下のタグに「params[:controller]」を追加してください。

<%= stylesheet_link_tag    'application', params[:controller], media: 'all', 'data-turbolinks-track' => true %>

<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track' => true %>

Step3. config/initializers/assets.rb にファイルを追加します

%w( controller_one controller_two controller_three ).each do |controller|
  Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.js.coffee", "#{controller}.css", "#{controller}.scss"]
end

参照: http://theflyingdeveloper.com/controller-specific-assets-with-rails-4/

于 2016-03-14T15:22:58.220 に答える
1

ここにはいくつかの答えがありますが、おそらくあなたの編集が最善の策だと思います. Gitlabから取得したチームで使用するデザイン パターンは Dispatcher パターンです。あなたが話していることと似たようなことをしますが、ページ名はレールによって body タグに設定されています。たとえば、レイアウト ファイルに (HAML で) 次のようなものを含めるだけです。

%body{'data-page' => "#{controller}:#{action}" }

dispatcher.js.coffee次に、次のように、javascripts フォルダー内のファイルに1 つのクロージャーと switch ステートメントのみを含めます。

$ ->
  new Dispatcher()

class Dispatcher
  constructor: ->
    page = $('body').attr('data-page')
    switch page
      when 'products:index'
        new Products() 
      when 'users:login'
        new Login()

products.js.coffee個々のファイル (またはlogin.js.coffeeたとえば) で行う必要があるのは、それらをクラスで囲み、そのクラス シンボルをグローバル化して、ディスパッチャーでアクセスできるようにすることだけです。

class Products
  constructor: ->
    #do stuff
@Products = Products

Gitlab には、この例がいくつかありますので、興味がある場合は試してみてください :)

于 2015-01-31T00:15:59.327 に答える
1

私は別の解決策を持っています。これは原始的ですが、私にとってはうまく機能し、派手な選択的読み込み戦略は必要ありません。通常のドキュメント準備機能を入れますが、現在のウィンドウの場所をテストして、JavaScriptが意図したページであるかどうかを確認します。

$(document).ready(function() {
   if(window.location.pathname.indexOf('/yourpage') != -1) {
          // the javascript you want to execute
   }
}

これにより、すべての js を Rails 3.x によって 1 つの小さなパッケージにロードできますが、多くのオーバーヘッドや、js が意図されていないページとの競合は発生しません。

于 2012-07-20T17:49:07.050 に答える
1

Palomaプロジェクトは、ページ固有の JavaScript コードを管理するための興味深いアプローチを提供します。

ドキュメントからの使用例:

var UsersController = Paloma.controller('Users');

// Executes when Rails User#new is executed.
UsersController.prototype.new = function(){
   alert('Hello Sexy User!' );
};
于 2015-03-26T16:20:46.327 に答える
0

いくつかの答えを次のようにまとめました。

アプリケーション ヘルパー:

module ApplicationHelper
  def js_page_specific_include
    page_specific_js = params[:controller] + '_' + params[:action]
    if Rails.application.assets.find_asset(page_specific_js).nil?
      javascript_include_tag 'application', 'data-turbolinks-track' => true
    else
      javascript_include_tag 'application', page_specific_js, 'data-turbolinks-track' => true
    end
  end
end

レイアウト/application.html.haml:

 <!DOCTYPE html>
%html{lang: 'uk'}
  %head   
    = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
   bla-bla-bla
    = js_page_specific_include   
   bla-bla-bla  
于 2015-02-23T20:51:46.897 に答える
0

私はこれを試していませんが、次のように見えます。

  • javascript の content_for がある場合 (たとえば、実際の javascript が含まれている場合)、スプロケットはそれを認識しないため、現在と同じように機能します。

  • javascript のビッグ バンドルからファイルを除外する場合は、config/sprockets.yml ファイルに移動し、それに応じて source_files を変更します。次に、必要に応じて除外したファイルを含めるだけです。

于 2011-05-29T13:53:43.453 に答える
-2

ライアンからのリードに従って、これが私がやったことです-

アプリケーション.js.コーヒー

$ ->
    view_method_name = $("body").data("view") + "_onload"
    eval("#{view_method_name}()") if eval("typeof #{view_method_name} == 'function'")
    view_action_method_name = $("body").data("view") + "_"+$("body").data("action")+"_onload"
    eval("#{view_action_method_name}()") if eval("typeof #{view_action_method_name} == 'function'")

users.js.coffee (コントローラ固有の coffeescript、例: controller:users、action:dashboard)

window.users_dashboard_onload = () ->
    alert("controller action called")
window.users_onload = () ->
    alert("controller called")

application.html.haml

%body{:data=>{:view=>controller.controller_name, :action=>controller.action_name}}
于 2012-04-03T04:06:47.223 に答える
-3

特に、特定のページに対して大量のライブラリを実行する必要はなく、多かれ少なかれ数百行の JS を実行するだけの場合の方法を次に示します。

Javascript コードを HTML に埋め込んでもまったく問題ないため、app/views の shared.js ディレクトリの下に作成し、そこにページ/ページ固有のコードをmy_cool_partial.html.erb内に配置します。

<script type="text/javascript"> 
<!--
  var your_code_goes_here = 0;
  function etc() {
     ...
  }
-->
</script>

したがって、どこからでも簡単に実行できます。

  = render :partial => 'shared.js/my_cool_partial'

それだけですよね?

于 2013-10-14T21:22:00.263 に答える