我有一个带帮助程序的页面,它依赖于使用onBeforeAction在路由时设置的id_sell变量。目前的问题是在设置变量之前运行帮助程序。
this.route('/chat_id', {
path: '/chat/:_id',
template: 'Messages',
layoutTemplate: 'LayoutMessages',
onBeforeAction: function() {
id = Session.get("recipientId");
id_sell = this.params._id;
this.next();
}
})
如您所见,此id_sell var在此处设置。
不幸的是我收到了错误
模板助手中的异常:ReferenceError:未定义id_sell
当我的助手试图加载全局变量的值
时如何解决此加载错误
答案 0 :(得分:1)
看起来您正在使用铁路由器,在这种情况下,您可以将路线定义更改为
this.route('/chat_id', {
path: '/chat/:_id',
template: 'Messages',
layoutTemplate: 'LayoutMessages',
data: function() {
return {
id: this.params._id
}
}
})
在Messages
模板中,您可以访问Template.currentData().id
来访问变量。
然后,如果您想从集合中加载某些内容,可以将路线更改为
this.route('/chat_id', {
path: '/chat/:_id',
template: 'Messages',
layoutTemplate: 'LayoutMessages',
waitOn: function() {
return Meteor.subscribe('messages');
},
data: function() {
return {
id: this.params._id,
messages: Messages.find({ chatId: this.params._id })
};
}
});
然后模板将有Template.currentData().messages
可用,{{#each messages}}
将在html中使用。
(显然会将messages
和Messages
替换为您的出版物和收藏品的名称。
最后,您可以将this.params._id
传递到Meteor.subscribe(...)
来电,只订阅您关注的项目 - 但这是另一个故事。
答案 1 :(得分:0)
在helper运行之前,您可以使用Session来获取此变量的值。例如,
LIB / router.js
Router.route('/chat/:_id', function(){
Session.set("chatId", this.params._id);
this.render("chatTemplate", {to:"main"});
});
main.js
这里使用:
var id_sell = Session.get("chatId");
在助手运行之前,变量将在此处设置。