2013-01-15 100 views
3

我創建了一個流星0.5.4應用程序 - 添加賬戶 - 用戶界面,賬戶密碼,並添加{{loginButtons}}到模板名稱=「你好」塊帽子來與每個流星創建股票。如何在流星發佈功能獲取登錄用戶電子郵件?

當我在Chrome瀏覽器控制檯中輸入Meteor.user()。emails [0] .address按照這些SO來源 - http://goo.gl/MTQWu,http://goo.gl/Cnbn7 - 我得到當前登錄的用戶電子郵件。

當我試圖把如果(Meteor.isClient)段內的同一代碼:

Template.hello.greeting = function() { 
    return Meteor.user().emails[0].address; 
}; 

我得到:

Uncaught TypeError: Cannot read property '0' of undefined foo.js:3 
Exception from Meteor.flush: TypeError: Cannot call method 'firstNode' of undefined 

如果你不能把Meteor.user()在發佈功能中,我還可以如何獲取登錄用戶的電子郵件?我試着把它作爲一個共享函數,並用Meteor.call('getEmail',Meteor.userId())在客戶端函數中調用它,得到類似的結果。

回答

9

模板是被動的。這意味着當頁面加載時,模板會運行,並且當其依賴的數據源發生更改時,它將再次運行。在你的情況下,它第一次運行,Meteor.user()還沒有準備好,所以它還沒有emails屬性,這會導致錯誤。爲了解決這個問題,你需要檢查用戶對象是否存在尚未:

Template.hello.greeting = function() { 
    var user = Meteor.user(); 
    if (user && user.emails) 
    return user.emails[0].address; 
} 

要獲得發佈的功能中當前用戶,使用this.userId

+0

哦哇,這就像一個魅力。非常感謝解釋! – gamengineers

相關問題