我在设置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
答案 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");
});