2015-09-26 13 views
1

我想製作一個主頁,在其中發佈多個數據片段,但只有當用戶第一次訪問該頁面時:最近將發佈10篇文章,但就是這樣 - 它不會改變。如何發佈一段數據然後停止對此作出反應?

是否有辦法讓內置的pub/sub機制在設定的時間量或記錄數量或其他機制之後自動關閉?

現在我使用的是非常簡單的設置不「關閉」:

latestNews = new Mongo.Collection('latestNews'); 

if (Meteor.isClient) { 
    Meteor.subscribe("latestNews"); 
} 
if (Meteor.isServer) { 
    Meteor.publish('latestNews', function() { 
    return latestNews.find({}, {sort: { createdAt: -1 }, limit : 10}); 
    }); 
} 
+0

這將是很好,如果這個問題包含[mcve] ... –

+0

每個上面添加了一些代碼。 – Jon

回答

2

,因爲它的流星實現的發佈/訂閱模式是所有關於反應的數據更新。在你的情況下,這意味着如果作者或文章的最後更新日期發生變化,那麼用戶會立即看到這一變化反映在他們的主頁上。

但是,您想要發送一次數據,而不是再次更新它。
流星有一個內置的功能來處理這種情況:Methods。方法是客戶端告訴服務器執行計算和/或發送純粹的非反應數據的一種方式。

//Server code 
var lastTenArticlesOptions = { 
    sort : { 
    createdAt : -1 
    }, 
    limit : 10 
} 

Meteor.methods({ 
    'retrieve last ten articles' : function() { 
    return latestNews.find({}, lastTenArticlesOptions).fetch() 
    } 
}) 

請注意,與出版物相反,我們不發送Mongo.Cursor!光標在出版物中用作方便(又名魔術)的方式來告訴服務器要發送哪些數據。
在這裏,我們直接通過光標fetch發送數據數據以獲得一系列文章,然後自動發送到客戶端EJSON.stringifyied


如果你需要無功數據發送到客戶端,並在以後的某個時間停止推進更新,那麼你最好的選擇是依靠一個發佈/訂閱暫時,然後手動stoppublication(服務器端)或subscription(客戶端):

Meteor.publish('last ten articles', function() { 
    return latestNews.find({}, lastTenArticlesOptions) 
}) 
var subscription = Meteor.subscribe('last ten articles') 
//Later... 
subscription.stop() 

在你將存儲出版物手柄(this服務器端)和則m將其刪除。

停止訂閱或發佈不會破壞已發送的文檔(用戶不會看到最近的10篇文章突然消失)。

相關問題