Javascript模板 - 深度嵌套是可能的

Dee*_*ons 5 javascript asp.net templates nested mustache

我正在构建一个任务应用程序(为了好玩)我只是坐下来思考这个问题.我会在这里用言语表达我的想法.

模型非常简单,它包含了集合Project.每个Project都包含一个TaskList这样的TaskList是可嵌套的,例如,Task Design FrontPage可以将Design Header作为另一个TaskList.每个TaskList都包含Tasks.一个典型的javascript模板将如何看待这个问题.我无法找到适合这种情况的那个.此问题与N级嵌套菜单相同,您将如何使用模板库渲染它.

<div>
    {{#Projects}}
    <div>
        <b>{{ProjectName}}</b>
    </div>
    <ul>
        {{#TaskList}}
        <li>{{TaskListName}} {{CreatedBy}} The Problem Comes here - How do i Render a #TaskList
            here </li>
        {{/TaskList}}
    </ul>
    {{/Projects}}
</div>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果有人有asp.net解决方案(想法让我听到他们),N级深度嵌套是我现在无法克服的事情.

max*_*tty 7

您可以将您定义TaskList为部分,并在文档提示时递归包含它.

模板:

<script type="text/template" id="projects">
    {{#Projects}}
    <div>
        Project: <b>{{ProjectName}}</b>
    </div>
    {{>taskList}}
    {{/Projects}}
</script>

<script type="text/template" id="task-list">
    {{#TaskList}}
    <ul>
        <li>
            {{TaskListName}} <em>{{CreatedBy}}</em> 
            {{>taskList}}
        </li>
    </ul>
    {{/TaskList}}
</script>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

    var data = {
    Projects: [
        {
        ProjectName: "Project 1",
        TaskList: [{
            TaskListName: "Name 1",
            CreatedBy: "Person 1"},
        {
            TaskListName: "Name 2",
            CreatedBy: "Person 2",
            TaskList: [{
                TaskListName: "Sub Name",
                CreatedBy: "Same Person"},
            {
                TaskListName: "Sub Name 2",
                CreatedBy: "Person 1"},
            {
                TaskListName: "Sub Name 3",
                CreatedBy: "Person 3-2",
                TaskList: [{
                    TaskListName: "Sub Sub Name",
                    CreatedBy: "Person 3-3"}]}]}]},
    {
        ProjectName: "Project 2",
        TaskList: [{
            TaskListName: "Name 3",
            CreatedBy: "Person 3"},
        {
            TaskListName: "Name 4",
            CreatedBy: "Person 4"}]}]
},
    template = $('#projects').html(),
    partials = {
        taskList: $('#task-list').html()
    },
    html = Mustache.render(template, data, partials);

document.write(html);
Run Code Online (Sandbox Code Playgroud)

这是jsFiddle在行动中看到它 - http://jsfiddle.net/maxbeatty/ND7xv/