【发布时间】:2014-03-04 17:55:50
【问题描述】:
我有两个集合:一个用于帖子,一个用于类别。帖子有一个或多个类别。如果删除类别,我希望更新 Posts 集合,以便帖子包含任何不存在的类别。我有这个工作,但我不确定这是最有效的方法。
此代码是在按下类别删除按钮时触发的。这既会从集合中删除类别,又会遍历包含该类别的每个帖子并更新类别数组以排除已删除的类别。
Template.listCategories.events({
'click .delete-category': function(e){
e.preventDefault();
var category = this.name;
Categories.remove(this._id);
var posts = Posts.find({categories: category}).fetch();
for (var i=0;i<posts.length;i++){
var cats = _.without(posts[i].categories, category);
Posts.update(posts[i]._id, {$set: {categories: cats}});
}
}
});
首先,我将“类别”变量设置为与要删除的类别的名称相同。 其次,我实际上从集合中删除了类别。
最后,我设置了一个“posts”变量,等于获取包含类别名称的所有帖子,它返回一个帖子对象。我遍历帖子,并在下划线的帮助下,使用“_.without”函数返回一个不包括已删除类别的类别数组。然后我调用 Posts.update 以使用新数组更新类别。
不过,我担心的是我每次都在 For 循环中调用 Posts.update。这是一个客户端调用,所以也许这并不重要?我仍然觉得有更好的方法来做到这一点。有什么帮助吗?
【问题讨论】:
标签: meteor