2016-08-02 71 views
3

我試圖通過單擊其中一個模板上的按鈕來切換應用程序控制器上的全局屬性。我讀過一些關於動作冒泡的東西,但不能它起作用。將操作發送到EmberJS中的應用程序控制器

這裏的應用程序控制器

export default Ember.Controller.extend({ 
    isAuthenticated: true, 
    actions: { 
    logIn: function(){ 
     this.toggleProperty('isAuthenticated'); 
    } 
    } 
}); 

的財產和行動,並在這裏與一個login.hbs模板文件中的作用(我很快就會變成一個適當的按鈕)

<span {{action 'logIn'}}> 
    {{#link-to 'boards' class="btn-l bg-blue white db mtl link bn w-100"}}Login{{/link-to}} 
</span> 

我如何確保操作切換應用程序控制器上的屬性?

回答

2

在您的登錄控制器中,您需要注入應用程序控制器。

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    appCont:Ember.inject.controller('application') 
}); 

而在login.hbs中,您需要指定哪個目標將接收方法調用。

<button {{action 'logIn' target=appCont}}> Login </button> 

在這種<button {{action 'logIn'}}> Login </button>,模板的上下文是登錄控制器,用這樣的方式將泡沫登錄路由時登錄控制器不執行指定的操作的動作。一旦某個操作遇到登錄路由,它將通過路由層次結構進行冒泡。

參考:http://emberjs.com/api/classes/Ember.Templates.helpers.html#toc_specifying-a-target

編輯:如果你想調用在Controller可用的功能裏面Component then you need to pass actions to Component`

Login.hbs

{{component-a logIn=(action 'logIn') }} 

組件的一個。 hbs

<button {{action (action logIn)}}> LogIn</button> 
+1

或者像this.get('foreigncontroller')。send(「actionname」,parameter1,parameter2 ...)這樣的函數。 如果foreigncontroller被注入或提供 –

+0

這將以相同的方式與組件中的按鈕一起工作嗎? – jermainecraig

+0

@jermainecraig因爲你不能在組件內注入控制器。爲此,您需要使用應該從template.hbs發送到組件的閉包動作。 – kumkanillam

相關問題