2013-08-05 37 views
7

Tôi đang theo chuỗi trên http://minhajuddin.com/2013/04/28/angularjs-templates-and-rails-with-eager-loading để tải mẫu HAML mong muốn. Có vẻ như đó là một cách hợp lý để đảm bảo Angular có tất cả các partials HTML nó cần lưu trữ trên tải ban đầu để tránh các chuyến đi vòng không cần thiết đến máy chủ. Câu hỏi của tôi là, làm thế nào để làm điều tương tự với các mẫu erb/HTML thông thường nếu chúng ta không sử dụng HAML? Trên dòng cụ thể này:Tải mẫu tải xuống HTML/erb trong Rails cho AngularJS

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

Người ta cần bất kỳ thứ gì thay thế cho Haml::Engine.new cho các mẫu erb. Có một giải pháp cho rằng offhand vì vậy tôi có thể thực hiện ở trên cho các mẫu không dựa trên Haml của tôi?

Trả lời

7

Mã gốc sử dụng HAML là:

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

Để chọn tất cả các mẫu ERB, sử dụng

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

Để có được mẫu tên từ tên tệp, sử dụng

File.basename(f, '.erb') 

Để làm cho một mẫu ERB, sử dụng

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

Tham khảo documentation for #result.

Đặt mọi thứ lại với nhau, chúng tôi nhận được

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

Đối ERB các mẫu bạn có thể sử dụng:

<% 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 %> 
Các vấn đề liên quan