2015-12-13 37 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变量和订阅都会被更新。