HandlebarsJS打破循环

时间:2015-05-06 13:53:00

标签: javascript xml handlebars.js

我正在使用handelBarsJS将JSON转换为XML。

我有这个例子我正在研究:我有一个列表"输出" :

"output":[
    {
        "name":"Name1",
        "URI":"Link1",
        "Ref":"ref1"
    }, {
        "name":"Name2",
        "URI":"Link2",
        "Ref":"ref2"
    }, {  
        "name":"Name3",
        "URI":"Link3"
    }, {  
        "name":"Name4",
        "URI":"Link4"
    }
],

我有这个XML模板

<!-- output -->
{{#output}} {{^Ref}}
<outputs>
    <OutputList>
{{/Ref}} {{/output}}  
       {{#output}}{{^Ref}} 
        <output name="{{name}}" xlink:href="{{URI}}" />
        {{/Ref}} {{/output}} 
{{#output}} {{^Ref}}
    </OutputList>
</outputs>
{{{/Ref}} {{/output}}   

我想要做的只是检索输出的元素,这些元素必须具有属性&#34; Ref&#34;,我想要的输出XML格式的示例:

<!-- output -->
<outputs>
    <OutputList>
        <output name="Name3" xlink:href="Link3" />
        <output name="Name4" xlink:href="Link4" />
      </OutputList>
</outputs>

如果只有具有属性Ref的Output元素,我需要在XML文件中不显示任何内容,因为我需要根据XSD架构对其进行验证。

我需要在Handelbars对每个输出元素进行迭代时发现那里有一个带有ref属性的输出元素,它会添加这个只有一次就像在以下情况下打破/退出循环:

<outputs><OutputList> 
</OutputList> </outputs>

2 个答案:

答案 0 :(得分:2)

您的模板似乎非常复杂,您只需要一个each循环和unless帮助。

模板:

<script id="template" type="text/x-handlebars-template">
    <outputs>
       <OutputList>
            {{#each output}}
                {{#unless Ref}}
                <output name="{{name}}" xlink:href="{{URI}}" />
                {{/unless}}
            {{/each}}
        </OutputList>
    </outputs>
</script>

JavaScript的:

var json = {
    "output":[
        {
            "name":"Name1",
            "URI":"Link1",
            "Ref":"ref1"
        }, {
            "name":"Name2",
            "URI":"Link2",
            "Ref":"ref2"
        }, {  
            "name":"Name3",
            "URI":"Link3"
        }, {  
            "name":"Name4",
            "URI":"Link4"
        }
    ]
};

var source   = $("#template").html();
var template = Handlebars.compile(source);
var xml = template(json);

输出(var xml):

<outputs>
   <OutputList>
            <output name="Name3" xlink:href="Link3" />
            <output name="Name4" xlink:href="Link4" />
    </OutputList>
</outputs>

小提琴(见控制台):http://jsfiddle.net/zba1g0dv/5/

答案 1 :(得分:0)

我在将XML模板应用到我的JSON对象之前,通过简单地删除带有ref属性的Outputs元素来解决这个问题。

这就是我的工作XML模板:

  <!-- output -->
{{#if output}} 
<outputs>
    <OutputList>
 {{/if}}   
        {{#output}}
        <output name="{{name}}" xlink:href="{{URI}}" />
         {{/output}} 
{{#if output}} 
    </OutputList>
</outputs>
{{/if}}   

希望这有助于像我这样的新手。