在同一页面显示标签和帖子

Show tags and posts in the same page

基本上在 posts 索引页中,我想显示 posts 和相关标签,以便我可以使用它们进行过滤。通常一个 post 有很多标签,一个标签可以属于很多 post。这是我的部分代码:

export default Ember.Route.extend({
  queryParams: {
    location: { refreshModel: true },
    page: { refreshModel: true },
  },

  model: function(params){
    return this.store.findQuery('post', params);
  }
});

网络服务returns一个json喜欢:

{ posts: [
  {id: 1, title: "title", tags: [1, 2]}
], 
tags: [
  {id: 1, name: "Physics", posts: [1]}, 
  {id: 2, name: "Math", posts: [1]}
]}

为了在页面顶部显示所有标签,我在设置标签的数组控制器中有一个 属性:

setTags: function(){
  var str = "";
    this.store.all('tag').forEach(function(tag){
      str += tag.get('name') + ',';
  });
  this.set('tags', str);
}

# In template I use tags input to be able to filter posts by deleting tags:
{{tags-component value=tags}}

但是当我的模型使用位置、页面等其他过滤器进行刷新时,一些旧标签仍保留在商店中。出现了新旧标签(但我只想显示从服务器返回的新标签)

好像是个典型的issue,但是没找到类似的。任何资源如何实现它?

好的,据我所知,没有简单的答案(但如果有的话,请证明我是错的)。

而不是上面代码中的 this.store.all('tag')(它为您提供商店中缓存的所有标签),我将迭代(每个循环)post,获取每个 post 的标签并将这些标签放在标识映射中(映射或 "hash" of id => object)。这样你就可以避免重复。现在您将遍历地图中的值以生成您的字符串。