Rendering one mustache partial multiple times with different data

后端 未结 2 1941
耶瑟儿~
耶瑟儿~ 2021-02-08 23:47

I have two objects that I want to render side by side. There is never a case where I will want to render more, or less than two. My model is setup like so:

{
  o         


        
相关标签:
2条回答
  • 2021-02-09 00:34

    You could adjust your model to include the h1 and div so you could loop over a list sending different data to objPartial each time

    <script type="template/text" id="partial">
        <ul>
            {{#name}}
            <li>{{.}}</li>
            {{/name}}
        </ul>
    </script>
    
    <script type="template/text" id="main">
        {{#section}}
        <div>
            <h1>{{title}}</h1>
            {{>objPartial}}
        </div>
        {{/section}}
    </script>
    
    <script type="text/javascript">
    var partial = $('#partial').html(),
        main = $('#main').html(),
        data = {
            section: [
                {
                title: "Object 1",
                name: ["Curly", "Moe", "Larry"]},
            {
                title: "Object 2",
                name: ["Athos", "Porthos", "Aramis", "D'Artagnan"]}
            ]
        },
        html = Mustache.to_html(main,data, {
            "objPartial": partial
        });
    document.write(html);
    </script>
    

    See it on jsFiddle

    0 讨论(0)
  • 2021-02-09 00:36

    The syntax I think you are looking for is not {{>objPartial obj1}}, but rather it should be

    {{#obj1}}
    {{>objPartial}}
    {{/obj1}}
    

    The syntax for {{#}} isn't only for arrays - for non array objects the object becomes part of the current scope.

    I've forked maxbeatty's example and modified it to show this syntax:

    <script type="template/text" id="partial">
        <ul>
            {{#name}}
            <li>{{.}}</li>
            {{/name}}
        </ul>
    </script>
    
    <script type="template/text" id="main">
        <div>
            <h1>Stooges</h1>
            {{#object1}}
            {{>objPartial}}
            {{/object1}}
        </div>
        <div>
            <h1>Musketeers</h1>
            {{#object2}}
            {{>objPartial}}
            {{/object2}}
        </div>
    </script>​
    
    <script type="text/javascript">    
        var partial = $('#partial').html(),
            main = $('#main').html(),
            data = {
    
                object1: {
                    name: ["Curly", "Moe", "Larry"]},
                object2: {
                    name: ["Athos", "Porthos", "Aramis", "D'Artagnan"]}
    
            },
            html = Mustache.to_html(main,data, {
                "objPartial": partial
            });
        document.write(html);
    </script>
    

    Link to jsfiddle: http://jsfiddle.net/YW5zF/3/

    0 讨论(0)
提交回复
热议问题