我正在使用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中的嵌套视图,但似乎没有找到任何方法让它以递归方式循环遍历所有回复,以“树”方式显示所有注释...
答案 0 :(得分:2)
根据你的问题,我在理解究竟是什么属于评论和回复时有点麻烦,但我认为你仍然可以根据我的建议解决这个问题。
您要做的是使用Ember.CollectionView
并定义一个视图类,您将在集合视图中将其用作itemViewClass
。因此,您的itemViewClass
类似于CommentView
,以及具有以下模板的内容:
Comment Text: {{text}}
Replies: {{view Ember.CollectionView content=replies itemViewClass=HaBlog.CommentView}}
这是处理递归问题的唯一方法,就像你说的那样,只能用Handlebars来处理。