2013-08-05 11 views
7

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

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

一つは、代替がERBテンプレートのHaml::Engine.newのためには何でも必要があります。そのためのソリューションがありますので、私はHamlベースでないテンプレートに対して上記を実装できますか?

答えて

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', ...] 

を使用ファイル名からの名前、使用

ERBテンプレートをレンダリングする

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

を使用するには、documentation for #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 %> 
3

ERBはあなたが使用する可能性がありますテンプレートの場合:

<% Dir.glob(Rails.root.join('app','assets','templates', '*.erb')).each do |f| %> 
    $templateCache.put("<%= File.basename(f).gsub(/\.erb$/, '') %>", <%= ERB.new(File.read(f)).result.to_json %>); 
<% end %> 
関連する問題