簡體   English   中英

無法使Ember動作冒泡

[英]Cannot get Ember action to bubble

我花了很多時間嘗試在Ember中實現應該是一件簡單的事情:將操作從組件冒泡到應用程序控制器。 文檔說,為了進行操作,那么我需要做的就是在聲明模板時聲明該操作:

{{#if isLoggedIn}}
  {{menu-bar action="authenticate"}}
{{/if}}

...然后從組件(嵌套在登錄路徑中)發送操作:

authenticate: function() {
  //code omitted for brevity
  this.sendAction('authenticate');
}

...應通過申請路線接收:

  user: Ember.inject.service(),
  isLoggedIn: false,
  actions: {
    authenticate: function(){
      console.log('authenticated!');
      this.set('isLoggedIn', this.get('user').isLoggedIn());
    }
  }

但事實並非如此。 而且我在浪費大量時間試圖找出原因。

我敢肯定這確實很明顯,但是如果有人可以告訴我我在做什么錯,我將不勝感激。

您的問題是應用程序控制器不應該捕獲冒泡的動作,而應用程序路由卻應該。 為了我的一生,我再也無法在指南中找到相關的部分,但是動作不會在控制器中冒泡,它們會在路線中冒泡。 通常,一個動作首先要做的(在您的情況下是對的)是相關的控制器。 在您的情況下,您不希望控制器捕獲它並使其冒泡。 但是,如果某個動作未被控制器捕獲,則它會冒泡到該控制器的路由。 從那里,它不會冒泡到父控制器,而只會冒泡到父路由。

例如,假設您有以下路線:

this.route('books', function() {
    this.route('book', { path: '/:book_id' });
});

冒泡順序如下:

  1. 零件
  2. 書本控制器
  3. 預定路線
  4. 圖書路線
  5. 申請途徑

TL; DR:將您的操作吸引到應用程序路由中,而不是控制器中。 如果可以找到有關冒泡的指南,則可以編輯答案並鏈接到它。

錯誤是我將action =“ authenticate”放在錯誤的組件上! 向GJK和Daniel Kmak致歉,他們浪費您的時間來解決那個問題,但似乎我感到很困惑。

暫無
暫無

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

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