2013-08-05 22 views
7

Podążam za wątkiem na http://minhajuddin.com/2013/04/28/angularjs-templates-and-rails-with-eager-loading dla chętnych ładowanie szablonów HAML. Wygląda na to, że jest to rozsądny sposób zapewnienia, że ​​Angular ma wszystkie części strony HTML, które musi buforować przy pierwszym obciążeniu, aby uniknąć niepotrzebnych podróży w obie strony na serwer. Moje pytanie brzmi: jak zrobić to samo ze zwykłymi szablonami erb/HTML, jeśli nie używamy HAML? Na tej konkretnej linii:Chętne ładowanie szablonów HTML/erb w szynach dla AngularJS

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

One musiałaby cokolwiek substytutem dla Haml::Engine.new szablonów ERB. Czy istnieje rozwiązanie dla tego offhandu, więc mogę wdrożyć powyższe dla moich szablonów nie opartych na Haml?

Odpowiedz

7

Oryginalny kod używając haml jest:

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

Aby zaznaczyć wszystkie szablony ERB, użyj

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

Aby szablon imię i nazwisko z nazwy pliku, użyj

File.basename(f, '.erb') 

Aby uczynić szablon ERB, użyj

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

Patrz documentation for #result.

Umieszczenie wszystko razem, otrzymujemy

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

Dla ERB szablony można użyć:

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