9

私はこのようなアセットフォルダ構造を持っています

assets
  javascripts
    products
      --product.js
      --productValidate.js
    store
      --store.js

project.js と projectValidate.js を、製品コントローラーのアクションが呼び出されたときにのみアセット パイプラインの一部として application.js に追加し、ストア コントローラーのアクションが呼び出されたときに store.js を追加したいと考えています。Rails 3.1でこれを達成するにはどうすればよいですか?

4

5 に答える 5

4

Rahulがすでに述べたように、application.jsはプリコンパイルされており、すべてのアクションで同じです。したがって、特定のコントローラーに依存しません。Application.jsには、すべて(またはほとんど)のアクションに必要なJavaScriptが含まれている必要があります。

ただし、ネストされたレイアウトを使用してアプリケーションレイアウトを拡張することはできます。次の構造を想定します。

... app/view/layouts/application.html.erb ...

<html>
<head>
  <%= javascript_include_tag 'application' %>
  <%= yield :javascripts %>
  <%= stylesheet_link_tag 'application' %>
  <%= yield :stylesheets %>
</head>
<body>
  <%= yield %>
</body>
</html>

およびa:

... app/view/layouts/products.html.erb ...

<% content_for :stylesheets do %>
  <%= stylesheet_include_tag 'products' %>
<% end %>
<% content_for :javascripts do %>
  <%= javascript_include_tag 'products' %>
<% end %>
<%= render :template => 'layouts/application' %>

したがって、products-filesにスタイルシートとjavascriptを追加/要求するだけです。ここにあるすべてのコードは擬似コードとして読み取る必要があることに注意してください。私はそれをテストしていません。

「公式」レンダリングガイドから取得した情報。

于 2011-09-05T22:12:42.863 に答える
1

これは、Rails3.1アセットパイプラインとJammitの間のギャップを埋めるために現在取り組んでいることです。

まだ開発中であると考えているため、ドキュメントは提供していません。しかし、これは基本的にあなたができるべきことです:

# config/initializers/pakunok.rb
# Define the dependencies between Rails assets:
require 'pakunok'
Pakunok::Pakunok.current.configure do
  asset('products/product.js').needs('products/productValidate.js')
end

そして、レイアウトでは、単一のインクルードを実行するだけで済みます。すべての依存ファイルが自動的に含まれます

# app/views/layouts/application.html.erb
<%= include_javascripts %>

宝石が何をすることができるかについて学ぶためにスペックを見てください。注:これはまだ開発中であり、gem自体は後で複数のものに分割されます。

サポートしたい特定のユースケースについては、問題を送信してください。時間があるときに、それらを実装するために一生懸命働くことを約束します:)

于 2011-09-06T05:33:17.457 に答える
1

この質問への回答で言及されているアプローチが気に入っています。

Rails 3.1アセットパイプライン:コントローラー固有のスクリプトをロードする方法は?

于 2011-09-06T01:16:05.310 に答える
1

私が知る限り、assets pipilene はプリコンパイルする必要があるものです。したがって...概念的には、一度にすべてのファイルを取得し、コピーされたファイルを 1 つだけ返す必要があり、キャッシュに適しています。

それらをアセットのどこかに保存し(たとえば、古いRailsが行うようにパブリックに)、現在のコントローラーとアクションに応じて含めることができます

于 2011-09-05T20:55:59.297 に答える