0

我正在使用铁路由器。我有一个看起来像这样的 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 个元素。

问题是发布不是被动的,所以当用户第一次将他的角色更改为“订阅”并且我导航到我的路线(“/myapp”)时,用户仍然看到有限数量的元素而不是所有元素.

当我加载这条路线时,有没有办法手动重新触发订阅?如果可能的话,我想在不向我的应用程序添加新包的情况下执行此操作。

4

1 回答 1

0

不确定这种方法,但您可以尝试在路由中设置会话值而不是订阅代码。然后在您订阅所在的客户端的文件中,您可以将会话打包Meteor.subscribe("TheDataINeed")Tracker.autorun作为订阅参数。每次更改会话值时,自动运行都会重新运行订阅,它会根据新值返回数据。

于 2016-11-22T09:00:46.057 回答