我有一个带有帮助程序的页面,该助手依赖于使用 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变量。
不幸的是我收到错误
模板帮助程序中的异常:引用错误:未定义id_sell
当我的助手尝试加载全局变量的值时。
如何解决此加载错误
看起来您正在使用铁路由器,在这种情况下,您可以将路由定义更改为
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(...)
调用中,以仅订阅您关心的项目 - 但那是另一回事。
您可以使用 Session 在帮助程序运行之前获取此变量的值。例如
库/路由器.js
Router.route('/chat/:_id', function(){
Session.set("chatId", this.params._id);
this.render("chatTemplate", {to:"main"});
});
主.js
在这里使用:
var id_sell = Session.get("chatId");
变量将在帮助程序运行之前设置在此处。