0

まず、私は に精通していると言わせてくださいcontent_for。私が探しているのはここではありません。

テンプレートと任意の数のパーシャルを使用して、たとえば読み込みたい JavaScript ファイルのリストを作成し、それらをレイアウトに渡して処理し、<head>領域に追加できるようにしたいと考えています。ページで実際にファイルが必要な場合にのみファイルをロードしたいので、すべてをレイアウトに配置したくありません。また、これらは主にビュー固有の変更であるため、コントローラーによって処理されるようには見えません。

名前の配列を返すために使用しようとしましcontent_forたが、うまくいかないようです。また、複数のパーシャルが独自の前提条件をリストに追加することもできません。また、テンプレート/パーシャルでヘルパー関数を使用してリストに追加し、そのリストをレイアウトで使用しようとしましたが、レイアウト コードがテンプレート コードの前に評価されるようです。

何か案は?ところで、これは JavaScript 固有のものではありません。Ruby オブジェクトをテンプレート/パーシャルからレイアウトに渡す方法が必要なだけです。

編集:リクエストごと、例。css_importCSS をエミュレートする、私が書いた単なるヘルパーです@import

# In the layout
<style type="text/css">
<%- yield(:foobar).each do |foo| -%>
  <%= css_import foo %>
<%- end -%>
</style>

# In the template
<%- content_for :foobar do
  ['layout', 'recipes', 'user']
end -%>

# The actual output from View -> Source
<style type="text/css"> 
</style>
4

1 に答える 1

1

たぶん、content_forが何をしているのか見てみる必要がありますか?呼び出しに割り当てたブロックを実行し、インスタンス変数に格納するだけです。適切なパラメータを使用してyieldを呼び出すと、インスタンス変数が返されます。

目標を達成するために、独自の2つのヘルパーメソッドを作成することは完全に可能であるはずです。次に例を示します。

def register(key, value)
    @registry[key] = value
end

def fetch(key)
    @registry[key]
end

これらの関数を好きなように作成できます。たとえば、レジ​​ストリにJavaScriptファイルの場所のみが含まれている場合、ファイルパスだけでなくHTMLJavaScriptインクルードタグを返すことができます。

于 2009-10-08T07:09:15.487 に答える