会话变量在转到特定路由时不会更新

时间:2015-10-16 12:40:20

标签: javascript session meteor routes iron-router

我在设置Session变量和处理路由器

时做错了什么

main.js:

Template.global.onCreated(function(){
    Session.setDefault("musicFilteredCategory", "latest")
});

router.js:

Router.route("/music/:category?", {
    name: "music",
    template: "music",
    beforeAction: function () {
        var category = this.params.category;
        Session.set("musicFilteredCategory", category);
    }
});

但是当我打开页面" / music / latin-radio"我检查Session.get("musicFilteredCategory")我得到了#34;最新的"而不是" latin-radio"

后来我将Session.setDefault(" musicFilteredCategory","最新")更改为Template.global.onCreated({})之外,结果仍然相同。

这样做的最佳做法是什么?

我还想在修复后添加此功能: 当用户进入" / music"被重定向到" / music /:defaultMusicCategory"

PS:我正在使用Meteor 1.2.0.1&铁路由器1.0.9

1 个答案:

答案 0 :(得分:0)

正如@Kyll所指出的,我应该使用onBeforeAction来运行该函数。

这解决了我的问题,但访问不同路线时类别没有改变。

这就是我必须做的事情:

Router.route("/music/:category?", {
    name: "music",
    template: "music",
    onBeforeAction: function () {
        var category = this.params.category;
        if (category !== "undefined") {
            Session.set("musicFilteredCategory", category);
        }
        this.render("music");
    }
});

这不包括路线“/ music”(没有斜线)所以我也不得不添加这条路线,我把它放在上面的代码之前

Router.route("/music", {
    name: "music",
    template: "music"
});

要解决这个问题,我必须将Session.setDefault()移到模板范围之外,因为它们会覆盖路由器上建立的会话,因此我必须将它们放在Meteor.startup函数中

Meteor.startup(function () {
    Session.setDefault("musicFilteredCategory", "latest");
});