7

HAML テンプレートの熱心な読み込みについては、 http: //minhajuddin.com/2013/04/28/angularjs-templates-and-rails-with-eager-loadingのスレッドに従っています。サーバーへの不必要な往復を避けるために、Angular が必要なすべての HTML パーシャルを初期ロード時にキャッシュすることを保証する合理的な方法のようです。私の質問は、HAML を使用しない場合、通常の erb/HTML テンプレートで同じことを行うにはどうすればよいですか? この特定の行で:

$templateCache.put("<%= File.basename(f).gsub(/\.haml$/, '')  %>", <%= Haml::Engine.new(File.read(f)).render.to_json %>);
  <% end %>

Haml::Engine.newerb テンプレートの代わりになるものは何でも必要です。非 Haml ベースのテンプレートに上記を実装できるように、そのオフハンドの解決策はありますか?

4

2 に答える 2

7

HAML を使用した元のコードは次のとおりです。

<% Dir.glob(Rails.root.join('app','assets','templates', '*.haml')).each do |f| %>
  $templateCache.put("<%= File.basename(f).gsub(/\.haml$/, '')  %>", <%= Haml::Engine.new(File.read(f)).render.to_json %>);
<% end %>

すべての ERB テンプレートを選択するには、次を使用します。

Dir.glob(Rails.root.join('app', 'assets', 'templates', '*.erb'))
# => ['a.erb', 'b.erb', ...]

ファイル名からテンプレート名を取得するには、次を使用します。

File.basename(f, '.erb')

ERB テンプレートをレンダリングするには、次を使用します。

ERB.new(File.read(f)).result

#resultのドキュメントを参照してください。

すべてをまとめると、

<% Dir.glob(Rails.root.join('app','assets','templates', '*.erb')).each do |f| %>
  $templateCache.put("<%= File.basename(f, '.erb')  %>", <%= ERB.new(File.read(f)).result.to_json %>);
<% end %>
于 2013-08-12T00:19:22.440 に答える