2015-08-21 72 views
0

我正在尋找使用MeteorJS實現以下任務的最佳方法。MeteorJS中的相同集合的幾個訂閱

要求如下:包含項目的列表,以及包含選定項目的側欄(不必從當前頁面列表中選擇)。

enter image description here

我需要發送相同的項目收集的兩件到客戶端:

  • 項列表的當前頁面
  • 一個項目爲側欄

我應該執行什麼與出版物/訂閱跳舞?

這對我來說並不明顯如何正確地做到這一點。

目前我已經爲列表和選定的項目添加了兩個發佈,訂閱了它們在客戶端。因此,當我在客戶端上完成Items.find()以填充列表時,它返回列表頁面項目+所選項目(「項目5」出現在第一頁上)。

這是確定,當所選的項目應該是列表(「項目2」)的當前頁面上,但它不是OK時,選擇的項目不應該存在,並且已添加到當前頁面反正(「項目5」 )。

+0

我也會使用兩個pub/sub。首先是列出你的物品。然後你想把選擇的項目的ID保存在一個數組中,你可以使用'Session.get'和'Session.set'來存儲它。你的第二個酒吧將採取一個參數,這將是該陣列。並且會返回所有位於該數組中的ID的文檔。 –

+0

@KassymDorsel是的,但是如果你有來自同一個集合的酒吧,當你在客戶端做Items.find()時,你會從兩個酒吧收到_merge_項目......對吧?那就是我所面對的。列表包含不應該在那裏的項目。 – Artin

+0

如果我添加代碼段,理解我的問題會有幫助嗎? – Artin

回答

0

您的方法使用兩個出版物和兩個訂閱是正確的。結果是客戶端的集合將包含來自兩個pubsub的數據的聯合。鑑於這兩個發佈執行不同的查詢,您需要在客戶端上有兩個視圖才能在本地集合上執行相同的查詢。正如@ KassymDorsel所說,會話變量或被動變量可能對管理狀態有用。

+0

我試過列表的相同查詢,它打破了我的分頁。它爲什麼會有幫助?服務器酒吧跳過/限制項目的框架併發送給客戶端。客戶端跳過/限制類似,但在從服務器接收的幀上。顯然,我沒有從第二頁開始查詢的項目... – Artin

+0

pubsub *將文檔添加到客戶端minimongo數據庫。模板幫助程序中的* query *從客戶端minimongo數據庫中選擇這些文檔的子集以在UI中使用。 –

+0

嗯..有趣。如果它會添加文檔,那麼當我從第一頁開始並單擊第二頁時,它可能會起作用。項目會以minimongo和相同的查詢跳過/限制框架進行合計。但是如果我從url獲取當前頁面呢?如果我先走第一頁然後走第三頁怎麼辦? Minimongo db不會複製確切的服務器收集狀態,對吧?如果它會_add_。但是我沒有看到_adding_:打開第一頁,轉到控制檯,Items.find()。fetch()==從第一頁開始。轉到第二頁,Items.find()。從第二頁獲取()==項目。本地數據庫中沒有頁面聯合。任何想法? – Artin