How do I make recursive patterns in Meteor?

rather a theoretical question - how can I display recursive patterns in Meteor? For example, showing a comment on a comment with an unlimited number of comment sub-levels so that the HTML is diplayed like this:

<section>
   some text
   <section>
      nested text
      <section>
        further nested text and sections
        .....
      </section>
   </section>
</section>

      

In my case, I go to the "tree" template to the mongoDB document, and that document can have unlimited sub-content levels. My example below doesn't work the way I want.

<template name="tree">  
    <div class="wrapper" style="border:1px solid red">
        <ul>
            {{#each getStructure}}
            <li>
                {{#each content}}
                <ul>

                    <li>
                        <a class="item">{{text}}</a>

                        <!-- TODO: this stuff needs to be recursive. 
                        {{#if sub_content}}
                        <ul>
                            {{#each sub_content}}
                                <li>
                                <a class="item">{{text}}</a>
                                {{#if sub_content}}
                                ....
                                {{/if}}
                                </li>
                            {{/each}}
                        </ul>
                        {{/if}}
                    </li>

                </ul>
                {{/each}}
            </li>

            {{/each}}
        </ul>
    </div>
</template>

      

+3


source to share


1 answer


A simplified recirsuve example, let's say you had a post template template:

<template name="post">
  {{post_text}}

  {{#each comments}}
    {{>comment}}
  {{/each}}
</template>

      

and the mail assistant:

Template.post.helpers({
  comments: function() {
    return CommentCollection.find({post_id: this._id, parent_id: {$exists: 0}});
  }
});

      

I would create a template for the comment layout and provide a helper for sub-comments, depending on your data structure, something like the following:



<template name="comment">
  {{comment_text}}

  {{#each sub_comment}}
    {{> comment}}
  {{/each}}

</template>

      

and then the line mate:

Template.comment.helpers({
  sub_comments: function() {
    return CommentCollection.find({parent_id: this._id});
  }
});

      

This will recursively create a comment template for each sub-comment and then back up the tree to the next #each

one and then print that comment and all its sub-comments, etc.

+4


source







All Articles