我正在尝试从铁路由器中获取两个变量,以便我可以在我的temlate中调用它们,例如{{user.telephone}}
和{{pic.profilepic}}
。
我在路由器中的代码如下。 (不起作用!)
Router.route('/profile/:_id', {
name: 'profile',
template: 'profile',
data:function(){
return {
user:Info.findOne({_id:this.params._id}),
pic: Profilepics.findOne({_id:this.params._id})
};
},
subscriptions: function(){
return {
Meteor.subscribe("userInfo"),
Meteor.subscribe( "profilepic");
},
action:function (){
if (this.ready()){
this.render();
}else {
this.render('loading');
}
}
});
我只能用以下代码做一个变量。即得{{user.telephone}}
。任何人都可以帮助我获得变量而不仅仅是一个?
enterRouter.route('/profile/:_id', {
name: 'profile',
template: 'profile',
data:function(){
return {
user:Info.findOne({_id:this.params._id})
};
},
subscriptions: function(){
return Meteor.subscribe("userInfo")
},
action:function (){
if (this.ready()){
this.render();
}else {
this.render('loading');
}
}
});
答案 0 :(得分:1)
如果您使用的是最新版本的铁路由器,我建议您将代码更新为更现代的东西。
首先,您要创建一个通用的app控制器:
ApplicationController = RouteController.extend({
layoutTemplate: 'DefaultLayout',
loadingTemplate: 'loading_template',
notFoundTemplate: '404_template',
});
然后你开始为不同目的扩展它:
ProfileController = ApplicationController.extend({
show_single: function() {
this.render('profile');
}
});
在此之后,您可以为配置文件部分
创建路线Router.route('/profile/:_id', {
controller: 'ProfileController',
action: 'show_single',
waitOn: function() {
return [
Meteor.subscribe("userInfo"),
Meteor.subscribe("profilepic")
];
},
subscriptions: function() {
this.subscribe("somethingyoudontneedtowaitfor", this.params._id);
},
data: function() {
if (this.ready()) {
return {
user: Info.findOne({
_id: this.params._id
}),
pic: Profilepics.findOne({
_id: this.params._id
})
};
}
}
});
它可能需要更多代码,但它可以让您完全控制它的功能。此外,使用此功能,当路由器等待订阅准备就绪时,它会显示上面定义的加载模板。如果您不想显示加载,则将订阅移出waiton。
答案 1 :(得分:0)
从subscriptions
函数
使用return [
Meteor.subscribe("userInfo"),
Meteor.subscribe( "profilepic")
];
而不是
return { Meteor.subscribe("userInfo"), Meteor.subscribe( "profilepic");
{}
不匹配。
答案 2 :(得分:0)
在类似情况下我有
data: function() {
var gridId = this.params._gridId;
return (People.find({gridId: gridId})
&& GridLog.find({gridId: gridId}));
},
使用waitOn()处理程序中的subscribe调用作为布尔状态
的一部分waitOn: function() {
return (Meteor.subscribe('people', this.params._gridId)
&& Meteor.subscribe('gridlog', this.params._gridId) );
},
你可能会在waitOn()中将它们放在一起并获得更大的成功(看起来很奇怪)。