【问题标题】:Eager load HTML/erb templates in Rails for AngularJS在 Rails 中为 AngularJS 急切加载 HTML/erb 模板
【发布时间】:2013-08-05 14:50:08
【问题描述】:

我正在关注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 %>

对于 erb 模板,我们需要 Haml::Engine.new 的任何替代品。有没有解决方案,所以我可以为我的非基于 Haml 的模板实现上述功能?

【问题讨论】:

    标签: javascript ruby-on-rails ruby angularjs erb


    【解决方案1】:

    使用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
    

    请参阅documentation for #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 %>
    

    【讨论】:

      【解决方案2】:

      对于您可能使用的 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 %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多