我正在使用Iron Router。我有一个看起来像这样的RouterController:
var loggedInUserController = RouteController.extend({
layoutTemplate: "GenericLayout",
waitOn: function () {
return Meteor.subscribe("TheDataINeed");
}
});
我定义了一条使用此控制器等待“TheDataINeed'”的路线:
Router.route("/myapp", {
name: "Landing",
controller: loggedInUserController,
data: function () {
if(this.ready()){
return {content: "page-landing"};
}
}
});
现在,问题是我订阅的数据是有条件的:这意味着,根据用户的角色,我会发布不同的数据,如下所示:
if (!Roles.userIsInRole(this.userId, 'subscribed') ) {
return [
myData.getElements({}, { fields: { _id: 1, title: 1}, limit: 5 })
];
} else {
return [
myData.getElements({}, { fields: { _id: 1, title: 1} })
];
}
当用户的角色未被订阅时,我将发布的数据限制为5个元素。
问题在于发布不是被动的,所以当用户第一次改变自己的角色时,“订阅”#39;我导航到我的路线(" / myapp"),用户仍然看到有限数量的元素而不是所有元素。
在我加载此路线时,有没有办法手动重新触发订阅?如果可能,我希望在不向我的应用添加新软件包的情况下执行此操作。
答案 0 :(得分:0)
不确定该方法,但您可以尝试在路由中设置会话值而不是订阅代码。然后在客户端的文件中,您的订阅可以在Meteor.subscribe("TheDataINeed")
中包装Tracker.autorun
并将会话作为订阅参数。每次更改会话值时,autorun将重新运行订阅,它将根据新值返回数据。