在Rails中为AngularJS预加载HTML/erb模板

7
我正在关注有关使用急切加载HAML模板的AngularJS线程,链接为http://minhajuddin.com/2013/04/28/angularjs-templates-and-rails-with-eager-loading。这似乎是一种合理的方式,确保Angular在初始加载时缓存所有需要的HTML部分,以避免不必要的服务器往返。我的问题是,如果我们不使用HAML,如何使用常规的erb / HTML模板做到同样的事情?请看以下代码行:
$templateCache.put("<%= File.basename(f).gsub(/\.haml$/, '')  %>", <%= Haml::Engine.new(File.read(f)).render.to_json %>);
  <% end %>

对于erb模板,你需要使用类似于Haml::Engine.new的替代方法。是否有现成的解决方案,使我能够在非Haml的模板中实现上述功能?

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文档,涉及与IT技术相关内容。

将所有内容整合在一起,我们得到了:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接