templates - underscore.js 嵌套模板

标签 templates underscore.js

是否可以以某种方式从下划线模板中获取 DOM 元素并将其用作另一个模板?

这个想法是我的应用程序需要渲染一个包含带有项目和摘要的循环的文档。我偶尔需要重新渲染摘要或一些项目,因此我不能只重新渲染整个文档。

但是,我希望应用程序用户可以简单地为文档创建自己的模板,并且我认为将文档的所有内容都保存在一个文件中会更容易。

我正在尝试使用这样的东西:

<script type="text/template" id="document-template">
    <div id="document">
        <h1><%= name %></h1>
        <ul class="items">
            <% _.each(items, function(item) { %> 
                <li><%= item %></li>
            <% }); %>
        </ul>
        <div id="summary">
            <p>Total items: <%= totalitems %></p>
        </div>
    </div>
</script>

现在,我可以轻松地执行此操作 var documentTemplate = _.template($('#document-template').html()); 将其转换为文档模板,但我会喜欢将摘要部分变成模板,将列表项也变成模板。

我可以做这样的事情吗:

var summaryTemplate = _.template($('#document-template #summary').html());
var itemTemplate = _.template($('#document-template .items li').html());
PS。实际上,我正在使用 jQuery 的 $.get 从外部文件加载模板。这样我就能在一个大字符串中获得文档模板。从那里,我只需 documentTemplate = _.template(loadedString);

现在,如果我可以从字符串中提取#summary 元素,它应该可以工作。但是当我尝试将字符串转换为 DOM 元素时 ( var domElement = $(loadedString) ) (所以我可以这样做: summaryTemplate = _.template($('#summary',domElement).html());,它不起作用,因为下划线无法识别 < %= %> 标签不再。

最佳答案

您可以将嵌套模板作为模板分配中的变量传递给主模板,例如:

HTML:

<script type="text/template" id="sub_template">
  <article>
    <h1>id: <%= id %><h1>
  </article>
</script>

<script type="text/template" id="main_template">
  <% for (var i = 0; i < num; i++) { %>
    <%= renderSub({id:i}) %>
  <% } %>
</script>

JS:

 var renderSub = _.template( $('#sub_template').remove().text() ),
     renderMain = _.template( $('#main_template').remove().text() );

  renderMain({num:5, renderSub:renderSub});

关于templates - underscore.js 嵌套模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8938841/

相关文章:

c++ - 拥有自己的类模板和其他模板参数的 friend

c++ - 什么是 "Expression SFINAE"?

c++ - 成员函数的部分特化

javascript - 基于单独的数组向数组中的对象添加新属性

javascript - 从玩!到 Scalatra,模板化问题,目录结构

javascript - 主干 collection.add 不工作

node.js - Parse-Server 本地安装 - 外部模块

c++ - 构造函数中的段错误,但仅限于某些模板参数

c++ - 为什么编译器需要一个中间交换函数来推断类型?

javascript - Backbone 初始化时不保留属性值