2014-05-02 267 views
0

在我的流星应用程序我有列表其中有项目。所述物品可以属于多个解释,所以解释包含具有项目 ID数组的字段。当我去一个单一的列表视图我想要一个数据对象项目查询从这个ID数组。我想查询应该是这样的:查询使用流星返回的值与铁路路由器

Items.find({ _id: { $in: theArrayOfIds } }); 

但是如何/我在哪里做这个查询时,我打开我的单列表看法?目前这是我的路线声明:

this.route('list', { 
    path: '/list/:_id', 
    data: function() { 
    return { 
     list: Lists.findOne(this.params._id) 
    } 
    } 
}); 

我可以指向列表对象的未来结果吗?还是我在其他地方做这个查询?

回答

0

在Iron Router中,路由的数据值可以是一个对象,也可以是一个函数。见here in the documentation。因此,您可以在数据调用中返回这两个项目和列表,如下所示:

this.route('list', { 
    path: '/list/:_id', 
    data: { 
    list: function(){ 
     var id = Router._currentController.params._id; 
     return Lists.findOne(id); 
    }, 
    items: function(){ 
     var id = Router._currentController.params._id; 
     var list = Lists.findOne(id); 
     if (!!list){ 
     /* assuming your array of item ids is a field on list named items */ 
     var theArrayOfIds = list.items; 
     } 
     return !!list && Items.find({ _id: {$in: theArrayOfIds}}); 
    } 
}); 
+0

嗨,谢谢。但是,当我试图实现您的解决方案时发现,如果您不作为函数返回数据,则无法访问this.params._id。但是,我发现,成功地用这两个函数返回一个函数做了我想要的。如果你编辑你的答案(或者告诉我我错了),我可以将其标记为已接受。 – iiz

+0

嗨iiz。你是正确的,this.params._id不会访问数据对象内的路径ID。经过一番挖掘,我发现使用Router._currentController.params._id而不是this.params._id与数据对象将做到这一点,并编辑我的答案上面。您现在应该可以根据您的解决方案返回一个函数,或者按照我的示例,包含“list”和“items”的数据对象。 –