使用Ember + Handlebars处理动态嵌套视图

时间:2012-09-21 16:39:09

标签: ember.js handlebars.js

我正在使用Ember.js 1.0预发行版和Handlebars 1.0.0,并希望代表帖子的评论列表。

我的评论对象是:

// COMMENT ITEM
HaBlog.Comment = Em.Object.extend({
 user:null,
 text:null,
 created: moment().subtract('years', 100),
 createdAgo: function(){
     return (this.get('created').fromNow());
 }.property('created'),
 rating:null,
 replies:[]

});

这是我的视图模板:

 <div id="postComments" class="span10">
        <h1>Comments</h1>
        {{#each comments}}
        <div class="comment">
            <small>
                <span class="commentDate">
                    {{createdAgo}}
                </span>
            </small>
                <span class="commentText">
                    {{text}}
                </span>
        </div>
        {{#each comments.replies}}
        <div class="comment">
            <small>
                <span class="commentDate">
                    {{createdAgo}}
                </span>
            </small>
                <span class="commentText">
                    {{text}}
                </span>
        </div>
        {{/each}}
    </div>

我的问题是,每条评论都可以有多个回复,这些回复都是自己的评论,所以他们可以有更多回复。

我已经检查了Ember.js和Handlebars中的嵌套视图,但似乎没有找到任何方法让它以递归方式循环遍历所有回复,以“树”方式显示所有注释...

1 个答案:

答案 0 :(得分:2)

根据你的问题,我在理解究竟是什么属于评论和回复时有点麻烦,但我认为你仍然可以根据我的建议解决这个问题。

您要做的是使用Ember.CollectionView并定义一个视图类,您将在集合视图中将其用作itemViewClass。因此,您的itemViewClass类似于CommentView,以及具有以下模板的内容:

Comment Text: {{text}}
Replies: {{view Ember.CollectionView content=replies itemViewClass=HaBlog.CommentView}}

这是处理递归问题的唯一方法,就像你说的那样,只能用Handlebars来处理。