簡體   English   中英

僅在刷新頁面后定義Meteor.user()。profile

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM