2013-08-05 15 views
7

Sto seguendo la discussione su http://minhajuddin.com/2013/04/28/angularjs-templates-and-rails-with-eager-loading per caricare i modelli HAML. Sembra che sia un modo ragionevole per garantire che Angular abbia tutti i partial HTML necessari per la cache sul carico iniziale per evitare inutili round trip al server. La mia domanda è: come si fa la stessa cosa con i normali template erb/HTML se non si usa HAML? Su questa particolare linea:Eager caricamento di modelli HTML/erb in Rails for AngularJS

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

uno avrebbe bisogno qualunque sia il sostituto è per Haml::Engine.new per i modelli di erb. C'è una soluzione per questo in modo che io possa implementare quanto sopra per i miei modelli non basati su Haml?

risposta

7

Il codice originale utilizzando 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 %> 

Per selezionare tutti i modelli di ERB, utilizzare

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

Per ottenere il modello nome da un nome file, utilizzare

File.basename(f, '.erb') 

di rendere un modello di ERB, utilizzare

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

Fare riferimento alla documentation for #result.

Mettendo tutto insieme, otteniamo

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

Per ERB modelli che potrebbe utilizzare:

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