尽管WaitOn,流星订阅也不会刷新

时间:2016-05-22 11:14:51

标签: meteor iron-router meteor-publications

我正在使用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"),用户仍然看到有限数量的元素而不是所有元素。

在我加载此路线时,有没有办法手动重新触发订阅?如果可能,我希望在不向我的应用添加新软件包的情况下执行此操作。

1 个答案:

答案 0 :(得分:0)

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