流星:将变量从铁路由器拉到模板

时间:2016-01-30 22:52:52

标签: meteor iron-router meteor-blaze

我正在尝试从铁路由器中获取两个变量,以便我可以在我的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');
    }
  }
 }); 

3 个答案:

答案 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()中将它们放在一起并获得更大的成功(看起来很奇怪)。