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

时间:2015-04-08 20:48:25

标签: ember.js ember-cli

基本上在帖子索引页面中,我还要显示帖子和相关标签,以便我可以使用它们进行过滤。通常,帖子有很多标签,标签可能属于很多帖子。这是我的代码:

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

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

Web服务返回一个json,如:

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

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

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}}

但是当我的模型使用其他过滤器(如location,page ..等)刷新时,一些旧标签会留在商店中。所以出现旧标签和新标签(但是我想只显示从服务器返回的新标签)

这似乎是一个典型的问题,但我没有找到类似的东西。任何资源如何实现它?

1 个答案:

答案 0 :(得分:1)

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

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