2014-05-02 268 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」的數據對象。 –