基本上在帖子索引页面中,我还要显示帖子和相关标签,以便我可以使用它们进行过滤。通常,帖子有很多标签,标签可能属于很多帖子。这是我的代码:
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 ..等)刷新时,一些旧标签会留在商店中。所以出现旧标签和新标签(但是我想只显示从服务器返回的新标签)
这似乎是一个典型的问题,但我没有找到类似的东西。任何资源如何实现它?
答案 0 :(得分:1)
好的,据我所知,没有简单的答案(但证明我错了,如果有的话)。
而不是上面代码中的this.store.all('tag')
(它为你提供了在商店中缓存的所有标签)我会在帖子上迭代(每个循环),获取每个帖子的标签并将这些标签放在身份映射中(id =>对象的地图或“哈希”)。这样你就可以避免重复。现在,您将遍历地图中的值以生成字符串。