2013-08-05 8 views
7

Ich folge dem Thread auf http://minhajuddin.com/2013/04/28/angularjs-templates-and-rails-with-eager-loading für eifrige laden HAML-Vorlagen. Scheint so, als ob es ein vernünftiger Weg ist sicherzustellen, dass Angular alle HTML Partials hat, die es beim ersten Laden zwischengespeichert werden muss, um unnötige Round Trips zum Server zu vermeiden. Meine Frage ist, wie macht man das Gleiche mit regulären erb/HTML-Vorlagen, wenn wir nicht HAML verwenden? Auf dieser speziellen Zeile:Eifrige laden HTML/erb Vorlagen in Rails für AngularJS

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

Man müßte, was der Ersatz für Haml::Engine.new für erb-Vorlagen ist. Gibt es dafür eine Lösung, sodass ich das oben für meine Nicht-Haml-basierte Vorlagen implementieren kann?

Antwort

7

Der ursprüngliche Code mit HAML ist:

<% 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 %> 

Um alle ERB-Vorlagen auszuwählen, verwenden

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

die Vorlage zu erhalten Name aus einem Dateinamen, verwenden Sie

File.basename(f, '.erb') 

Um eine ERB-Vorlage, verwenden Sie zu machen

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

zum documentation for #result finden.

Putting alles zusammen, so erhalten wir

<% 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

Für ERB Vorlagen, die Sie verwenden können:

<% 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 %> 
Verwandte Themen