2016-01-30 419 views
0

我試圖從鐵路由器得到兩個變量,這樣我基本上可以給他們打電話,我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

嘗試返回多個訂閱作爲數組'返回[ Meteor.subscribe(「用戶信息」), Meteor.subscribe(「profilepic」) ]' –

+0

確實具有相同'_id都集合'? 'Profilepics'可能有diff ID。 –

+0

是他們do.100%肯定 – user1487244

回答

0

返回多個訂閱從subscriptions函數數組,

使用return [ Meteor.subscribe("userInfo"), Meteor.subscribe("profilepic") ];

代替

return { Meteor.subscribe("userInfo"), Meteor.subscribe("profilepic");具有{}失配。

+0

那這部分, 回報{ 用戶:Info.findOne({_ ID:this.params._id}), PIC:Profilepics.findOne({_ ID:this.params._id }) }; 我可以一次使用一個變量(用戶或圖片),但不能同時使用兩個變量。任何想法,爲什麼? – user1487244

+0

這部分是沒問題的,你可以返回一個對象作爲數據上下文,通過在瀏覽器控制檯中運行查詢來驗證訂閱 –

+0

是的,我已經完成了訂閱。此外,如果我只是使用 return { user:Info.findOne({_ id:this.params._id}) }; 它的工作原理,也如果我照相同樣的工作,但一起它不起作用 – user1487244

0

在類似的情況下,我有

data: function() { 
    var gridId = this.params._gridId; 
    return (People.find({gridId: gridId}) 
      && GridLog.find({gridId: gridId})); 
}, 

與在waitOn()的認購調用處理程序

waitOn: function() { 
    return (Meteor.subscribe('people', this.params._gridId) 
    && Meteor.subscribe('gridlog', this.params._gridId)); 
}, 

你可能有更多的成功只是& &荷蘭國際集團他們的布爾狀態的一部分一起在waitOn()(看起來很奇怪)。

1

如果您使用的是最新版本的鐵路由器的,我建議你更新代碼的東西更現代一點。

首先創建一個通用的應用程序控制器:

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 
       }) 
      }; 
     } 
    } 
}); 

這可能是更多的代碼,但它可以讓你在世界衛生大會完全控制它確實如此。此外,在路由器正在等待訂閱準備就緒的情況下,使用它,它將顯示上面定義的加載模板。如果您不想顯示加載,則將訂閱移出等待。