2016-08-02 79 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

相关问题