2014-09-12 83 views
0

我的應用使用鐵路路由器:當用戶點擊包含通配符的某個路由時,我想使用通配符的值調用流星方法並返回值用於設置模板的數據上下文。鐵路路由器:通過流星法將數據傳遞給客戶端

實施例:

流星方法:

getUserName: function(id){ 
    return Meteor.users.findOne({_id: id}).profile.name; 
} 

路由器:

data: function(){ 
     Meteor.call('getUserName', this.params.userId, function(error, result){ 

     }); 
    } 

流星方法返回正確的值,我可以在回調函數訪問該值。但我的問題是我不知道如何實際使用這些數據。只是從回調中返回不起作用。

這樣做的正確方法是什麼?或者,在這種情況下,調用Meteor方法不是一個好主意嗎?什麼是替代呢?

非常感謝您的回答!

回答

2

您可以使用此方法更新視圖:

Meteor.call("getUserName",this.params.userId, function(error,result){ 
    if(error) { 
    throw new Error("Cannot get userName"); 
    return;  
    } 

    Session.set("userName",result) 
}) 

查看:

Template.template_name.helpers({ 
    userName:function(){ 
    return Session.get("userName"); 
    } 
}) 

如果用戶將改變他的名字,那麼上面的方法將不會再更新userName,直到用戶開放路線。

但是我認爲最好的方法是使用反應性良好與流星酒吧/子方法。 在下面的解決方案userName將在視圖中更新,只要它將在mongo中更改。

Router.onBeforeAction('loading'); 

this.route("someRoute", { 
    waitOn:function(){ 
    return Meteor.subscribe("getUser",this.params.userId); 
    }, 
    data:function(){ 
     var user = Meteor.users.findOne({_id: this.params.userId}); 
     var userName = user && user.profile && user.profile.name; 
     return{ 
     userName: userName 
     } 
    } 
}) 

而且在服務器上:

Meteor.publish("getUser",function(userId){ 
    return Meteor.users.find(userId,{fields:{profile:1}}); 
}) 

在模板someRoute您鍵入顯示userName

{{userName}} 
相關問題