2014-01-10 11 views
3

在Meteor 0.7.0.1中,是否可以計算/找出當前正在收聽特定收藏的所有查詢?找出在Meteor.js Collection上收聽的所有查詢

我想創建一個函數,它的作用:當用戶的監聽某個特定查詢號碼(如:myCollection.find({color:'red'})變爲非零,執行每當文件被改變/加入第二個集合anotherCollection功能

回答

0

何時/如何調用find方法?例如,如果某人在頁面上點擊某個按鈕時調用該方法,則只需增加一個服務器端變量,該變量在該頁面出現時將會增加。到window.onbeforeunload事件並在發生時減少計數。

或者,如果您有登錄系統,請指定一個bo olean值,例如online給每個用戶。登錄時,請使用以下代碼使其在線狀態爲真。 if(Meteor.user()){Meteor.user().online=true;}。確保onbeforeunload離開時將其在線狀態設置爲false。然後,執行諸如Meteor.users.find({online:true}).size()之類的操作來獲取在線用戶的數量。

基本上,而不是更新時調用myCollection.find({color:'red'}),把它放在一個函數。例如:

if(Meteor.isClient){ 
Session.set('browsing', false); 
function findColor(c){//Alerts the server when the user attempts to get a color. 
//This is presuming they don't use the plain MongoDB command. 
//Your button/however you're finding the color should use this command 
if(!Session.get('browsing'))//if it's already true, don't increase the count 
{ 
Meteor.call('incBrowsing'); 
Session.set('browsing', true); 
} 

return myCollection.find({color:c}); 
} 
window.onbeforeunload = function(){Meteor.call('decBrowsing');}; 
} 

if(Meteor.isServer){ 
var browsing = 0; 
Meteor.methods({ 
incBrowsing: function(){browsing++;}, 
decBrowsing: function(){browsing++;} 
}); 
} 

我還沒有測試過這個,但我希望它適合你。你沒有提供太多關於你的問題的細節,所以如果你或我需要澄清一些事情,請隨時在下面發表評論。

+0

謝謝你的迴應!爲了檢測用戶是否仍然在頁面上,有沒有比'window.onbeforeunload'更可靠的東西?有什麼可以檢測websocket連接是否仍然活動? – Nyxynyx

+0

你絕對可以使用websocket,但它比內置窗口事件複雜得多。流星使用SockJS,如果你想看看。 – mjkaufer