[英]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' });
});
冒泡順序如下:
TL; DR:將您的操作吸引到應用程序路由中,而不是控制器中。 如果可以找到有關冒泡的指南,則可以編輯答案並鏈接到它。
錯誤是我將action =“ authenticate”放在錯誤的組件上! 向GJK和Daniel Kmak致歉,他們浪費您的時間來解決那個問題,但似乎我感到很困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.