【问题标题】:Using custom delimiters hogan-express and handling {{{ yield }}}使用自定义分隔符 hogan-express 和处理 {{{ yield }}}
【发布时间】:2014-03-10 20:22:13
【问题描述】:

我在解决这个问题时遇到了问题。我正在尝试在新的 expressjs 应用程序中使用 hogan.js(通过 hogan-express),但我也想在前端使用 hogan.js(我将使用 Backbone、lodash 等)。

我正在使用我拥有的布局

    ...
    {{> header }}
    {{{ yield }}}
    {{> footer }}
    ...

然后,在布局的底部:

    <script type="text/template">
        {{> template }}
    </script>

到目前为止,这些分隔条目将由 hogan-express 处理,但插入到该 {{> template }} 调用中的模板包含分隔条目。看起来是这样的:

    <section>{{name}}</section>

而且我需要被 hogan-express 忽略,所以前端的 hogan 会处理它。

现在,我不介意更改 hogan-express 的分隔符。我试过了,但它可以工作......使用自定义分隔符会破坏 {{{ yield }}} 调用。我尝试使用 作为分隔符并将产量更改为 (以及它的各种变体),但似乎没有任何效果。

关于如何在 hogan-express 中使用自定义分隔符而不破坏“收益”的任何想法?

谢谢!

【问题讨论】:

    标签: javascript express hogan.js


    【解决方案1】:

    我遇到了和你一样的情况。我找不到一个简单的解决方案,所以我使用了一个混合的解决方案,通过结合其他建议的想法来让它真正起作用。我同时使用 hogan-expresshogan-express-partials

    1. 使用上面关于app.locals的建议

      app.set('views', config.root + '/server/views');
      app.enable('view cache');
      app.set('view engine', 'html');
      app.locals.delimiters = '<% %>';
      app.set('layout', 'layout');
      app.set('partials', { nav: 'nav', footer: 'footer' });
      app.engine('html', hoganExpress);
      app.use(partials.middleware());
      
    2. 在包装模板中手动设置 yield 插值。请注意,我暂时手动切换分隔符以使用默认值。

      <%> nav %>
      
      <div class="container">
      
          <!-- Switch to use original delimiters -->
          <%={{ }}=%>
          {{{ yield }}}
      
          <!-- Switch back to delimiters that don't conflict with angular -->
          {{=<% %>=}}
      
      </div>
      
      <%> footer %>
      

    它似乎有效,但我对此并不特别满意。我研究了与您的方法几乎相同的解决方案。我在 hogan.js 库中发现的唯一另一个奇怪之处是 tripleStash 似乎也允许使用 & 符号(即 &amp;),但我似乎无法让它工作。

    【讨论】:

      【解决方案2】:

      在我使用的 expressjs 4.x 中解决这个问题

      app.locals.delimiters = '<% %>';
      

      把这个sn-p放到app.js之后

      app.set('views', path.join(__dirname, 'views'));
      app.set('view engine', 'hjs');
      

      【讨论】:

      • 这救了我的命!谢谢老哥
      【解决方案3】:

      解决方案是在模板中设置定界符 Mustache-style 并保留 yield:https://mustache.github.io/mustache.5.html#Set-Delimiter

      所以在你的模板中:

      {{=<% %>=}}
      <section><% name %></section>
      <%={{ }}=%>
      

      这有点旧,但也许这对其他人有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-12
        • 2017-05-07
        • 2021-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        相关资源
        最近更新 更多