8

我不知道如何处理模板中的递归数组。我在 handlebarsjs 的文档中找不到任何东西

有我的代码:js:

    var 分支 = [{
                name:"firstLayerNodeA",
                has_branch:真,
                分支:[{
                        名称:“第二个布局节点A”,
                        has_branch:false
                    },{
                        名称:“第二个布局节点B”,
                        has_branch:真,
                        分支:[{
                                名称:“第三层节点A”,
                                has_branch:真,
                                分支:[{
                                        //第四层
                                        //第五层
                                        //.....
                                }]
                        }]
                }]
            },{
                name:"firstLayerNodeB",
                has_branch:false
            }]

html

<Template name="tree">
  <ul>
  {{#each brach}}
      <li>
        name
        {{#if has_branch}}
          <ul>
          {{#each brach}}
              <li>
                name
                {{#if has_brach}}
                      {{#each brach}}
                          .....third layer
                          .....fourth layer
                          ....
                      {{/each}}
                {{/if}}
              </li>
          {{/each}
          </ul>
        {{/if}}
      </li>
  {{/each}}
  </ul>
</Template>

有处理模板中分支的好主意吗?任何帮助表示赞赏。

4

2 回答 2

4

您可以使用嵌套模板:

客户端js

Template.tree.branch = function() {
    var branch = ...
    return branch;
}

html

<template name="tree">
  <ul>
    {{#each branch}}
      <li>    
        {{>branch}}
      </li>       
    {{/each}}
  </ul>
</template>

<template name="branch">
    {{name}}
    {{#if branch.length}}
       <ul>
           {{#each branch}}
               <li>
                   {{>branch}}
               </li>
           {{/each}}
       </ul>
    {{/if}}
</template>

你也不需要has_branch. 只需检查分支数组的长度,因为每个只会循环如果它是一个数组并且那里有东西

于 2013-03-08T13:42:33.633 回答
2

Akshat 的回答非常好。但是,使用它时,我在事件处理方面遇到了一些问题。该事件被多次捕获;branch对于包含引发事件的元素的模板的每个实例一次。

不确定这是错误还是功能...无论如何我可以使用以下方法克服它:

Template.branch.events({
  'click': function (e,b) {    
    console.log("this will show up as often as deep your tree is");
    if (this._id==b.data._id)
      console.log("this will show up only once");
  }
});
于 2014-04-03T16:46:50.797 回答