簡體   English   中英

在Meteor用戶登錄/注銷時更新條件屬性

[英]Update conditional attributes on Meteor user login/logout

我正在將流星與Iron-router一起使用(如果相關)。 為了適應0.8更新,我進行了一些更改,但我仍然在做一些事情。

我不是使用html的div內的條件屬性,而是使用.rendered設置這些屬性。 但是現在,當用戶登錄時,我必須刷新頁面或瀏覽並返回(我認為刷新不是必需的),這樣元素才能正確運行。

有沒有人知道如何在用戶登錄或注銷后立即根據用戶是登錄還是注銷來使這些屬性正確運行?

Template.pt_entry.rendered = function() {
  $('#signin').popover(),
  $('#reviewModal').on('shown.bs.modal', function () {
    $('#review-text').focus();
  });
  if(Meteor.userId()){
    $('#signin').attr( 'data-toggle', 'modal' ),
    $('#signin').attr( 'data-target', '#reviewModal' )
  } else {
    $('#signin').attr( 'data-toggle', 'popover' ),
    $('#signin').attr( 'data-container', 'body' ),
    $('#signin').attr( 'data-content', 'you must sign in to review' ),
    $('#signin').attr( 'data-trigger', 'click' )
    //add some logic for displaying error template.
  }
}

實際上,您有不同的選擇:

如果使用Iron-Router,通常可以在同一條路線中顯示不同的模板。 您可以檢查用戶是否已登錄,並基於此檢查可以在模板之間切換。 您可以使用beforeHook進行檢查:

beforeHooks =  {
  isLoggedIn: function() {
    if(!(Meteor.loggingIn() || Meteor.user())) {
      Router.go('landingPage');
      this.stop();
    }
  }
}

Router.onBeforeAction(beforeHooks.isLoggedIn);

另一個選擇是使用默認的{{currentUser}}助手

 {{#if currentUser}}
   <p>User is logged in</p>
 {{else}}
   <p>User is not logged in</p>
 {{/if}}

也許您的代碼不起作用的原因可能是新的火焰引擎。 一旦Blaze觸發了呈現的回調。 通常,Meteor.userId()是一個反應性數據源,因此將重新渲染您的模板,但是如果渲染的回調僅在未應用更改后被觸發,則被重新渲染。 也許這些想法可以幫助您!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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