[英]Meteor.user().profile only defined after a page refresh
我有一個名為“ isActive”的助手和一個名為“ create”的模板。
Template.create.isActive = function () {
return Meteor.user().profile.isActive;
};
當我嘗試運行此代碼時,它將在控制台中返回以下內容:“模板助手中的異常:TypeError:無法讀取未定義的屬性'profile'”。
我通過使用鐵路由器來等待配置文件加載來解決此問題:
//startup on server side:
Meteor.publish("userData", function() {
if (this.userId) {
return Meteor.users.find({_id: this.userId},
{fields: {'profile.isActive': 1}});
} else {
this.ready();
}
});
//startup on client side
Meteor.subscribe('userData');
//router
this.route('create', {
path: 'create',
waitOn : function () {
return Meteor.subscribe('userData');
},
data : function () {
return Meteor.users.findOne({_id: this.params._id});
},
action : function () {
if (this.ready()) {
this.render();
}
}
});
但是...僅在刷新頁面時有效,而在初始加載時不起作用。 有人知道為什么會這樣嗎? 有解決方法或更好的方法嗎?
為了避免錯誤“模板幫助器中的異常:TypeError:無法讀取未定義的屬性'profile'”,您需要檢查Meteor.user()
是否返回了對象。 標准模式是:
Template.create.isActive = function () {
var user = Meteor.user();
return user && user.profle.isActive;
};
一旦您的助手拋出錯誤,反應性將不起作用,因此您需要確保處理訂閱數據尚未到達的情況。
同樣,等待“ userData”訂閱將延遲模板加載,但用戶配置文件在登錄時會自動發布(作為空訂閱)。 因此,您的等待會導致任意延遲,這將增加Meteor.user()定義的機會,但它不會直接等待所需的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.