7

我正在关注http://minhajuddin.com/2013/04/28/angularjs-templates-and-rails-with-eager-loading上的线程,以急切加载 HAML 模板。似乎这是确保 Angular 在初始加载时缓存所需的所有 HTML 部分以避免不必要的服务器往返的合理方法。我的问题是,如果我们不使用 HAML,如何使用常规 erb/HTML 模板做同样的事情?在此特定行上:

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

人们需要任何替代Haml::Engine.newerb 模板的东西。是否有针对该副手的解决方案,以便我可以为我的非基于 Haml 的模板实现上述功能?

4

2 回答 2

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

要从文件名中获取模板名称,请使用

File.basename(f, '.erb')

要呈现 ERB 模板,请使用

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

请参阅#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 %>
于 2013-08-12T00:19:22.440 回答
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 %>
于 2013-08-08T10:30:02.983 回答