我有一个名为" Articles"的集合。每篇文章都有一个类别。我希望有一个全局变量是一个数组,在我的文章集合中包含每个不同的类别值。
我试着这样做:
/models/article.coffee:
@Articles = new Meteor.Collection"文章"
Articles.categories = ->
Meteor.call "articleCategories", (e, r) ->
unless e
return r
/server/article_server.coffee:
Meteor.methods
articleCategories: ->
categories = _.uniq(Articles.find({}, {sort: {category: 1}, fields:
{category: true}}).fetch().map (x) ->
x.category
, true)
return categories
这不起作用。结果是"未定义"当我从控制台调用Articles.categories()时。
我做错了什么?
编辑:
我想这样做,因为我希望我的文章类别可以在网站的任何地方使用。
由于文章集合不会在每个页面上发布,我认为,我可以生成一个阵列服务器端并将其传递给客户端。
但也许这不是一个好主意......
答案 0 :(得分:1)
A Meteor.method
will always return undefined on the client(除非存在模拟/存根,并且在另一个父方法中调用它),因此预期会出现此行为。
我不确定为什么在这个特定的用例中你需要Meteor.method
,你不能只是在方法中复制你的方法代码吗?
编辑:
为了完成您想要做的事情,我建议您更改模型以创建一个填充了所有可能类别的Categories
集合,然后将整个内容发布到客户端。
然后只需在Articles
集合中使用外键。
与使用Meteor.method
相反,您的类别访问客户端将具有反应性,这将带来额外的好处。
无论是Telescope还是Wordpress,我认为这种架构非常受欢迎。
答案 1 :(得分:0)
看看这个包裹:
https://github.com/dburles/meteor-collection-helpers
在你的模型中添加这样的东西(我用javascript编写):
Articles.helpers({
categories: function(){
return _.uniq(
_.pluck(Articles.find({}, {sort: {category: 1}, fields:
{category: true}}).fetch(), 'category'),
true
);
}
});