2015-12-13 104 views
1

我想更新傳遞給流星中的訂閱參數的id - 簡而言之,我想訂閱任何集合對象與當前網址中的id。我可以在第一次加載時發生這種情況,但不會在創建新對象時將用戶路由到其會話中的新對象。在流星會話期間更新訂閱數據

我一直能夠得到這個模糊的工作是唯一的方法是使用setInterval黑客 - 不是我知道,所以我正在尋找正確的流星方式。

目前我在serverpublications.js是:

Meteor.publish('shares', function(id){ 
return Shares.find({_id:id}); 
}); 

router.js

Router.route('/share-social/:_id', { 
name: 'shareSocial', 
data: function() { return Shares.findOne(this.params._id); } 
}); 

,並通過main.jsclient訂閱:(即,拿在URL中的id和訂閱的)

setInterval(function(){ 
var x = location.href.split('/'); 
var id = x.slice(-1).pop(); 
Meteor.subscribe('shares', id); 
}, 100); 

,最後是模板助手:

Template.shareSocial.helpers({ 
    shares: function() { 
    return Shares.find().fetch(); 
} 
}); 

上面顯然有它的問題。我該如何反應性地訂閱具有當前網址中顯示的ID的對象,無論它是在同一個會話還是在新的會話中?

謝謝!

回答

0

而不是從URL切片的id,你可以設置爲您訂閱的反應源通過定義電流id到一個會話變量,如:

// router.js 
 
Router.route('/share-social/:_id', function() { 
 
    Session.set('id', this.params._id); 
 
    this.render('shareSocial'); 
 
}); 
 

 
// main.js 
 
Tracker.autorun(function() { 
 
    Meteor.subscribe('shares', Session.get('id')); 
 
});

現在每次你改變你的路由的id,Session變量和訂閱都會被更新。