【问题标题】:Send actions to the Application controller in EmberJS在 EmberJS 中向应用程序控制器发送操作
【发布时间】:2016-08-02 17:43:07
【问题描述】:

我正在尝试通过单击其中一个模板上的按钮来切换应用程序控制器上的全局属性。我读过一些关于动作冒泡的东西,但它不能工作。

这是应用程序控制器上的属性和操作

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> 

如何确保该操作切换应用程序控制器上的属性?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    在你的登录控制器中,你需要注入应用控制器。

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

    在 login.hbs 中,您需要指定哪个目标将接收方法调用。

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

    在这个&lt;button {{action 'logIn'}}&gt; Login &lt;/button&gt; 中,模板的上下文是登录控制器,当登录控制器没有实现指定的动作时,这种方式使用的动作会冒泡到登录路由。一旦某个操作到达登录路由,它将在路由层次结构中冒泡。

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

    编辑:如果你想在Component then you need to pass actions toComponent 中调用Controller 中可用的函数`

    登录.hbs

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

    组件-a.hbs

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

    【讨论】:

    • 或者在这样的函数中。get('foreigncontroller').send("actionname",parameter1, parameter2...);如果无论如何注入或提供了foreigncontroller
    • 在组件中使用按钮是否会以同样的方式工作?
    • @jermainecraig 不,因为您不能在组件内注入控制器。为此,您需要使用应该从 template.hbs 发送到组件的闭包操作。
    • @jermainecraig 更新了我从组件调用控制器操作的答案。
    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 2017-10-31
    • 2012-08-14
    • 2013-10-05
    • 2019-12-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多