如何在ember-cli中实现全局操作

时间:2016-10-28 17:44:41

标签: ember.js

我需要有可以从我的所有车把模板访问的全局操作doLogin {{ action "doLogin" }}

有没有办法实现这个,或者我可能需要在我的ember-cli应用程序上创建全局控制器?

1 个答案:

答案 0 :(得分:2)

它实际上非常简单,尽管它远非最佳方式。要将您的操作完全放在每个控制器中,您可以在初始化程序中重新打开它并将其写入其中。您只需要使用app/initializers/controller-login.js创建文件ember generate initializer controller-login:并输入以下内容:

//app/initializers/controller-login.js
import Ember from 'ember';

export function initialize() {
  Ember.Controller.reopen({
    actions: {
      doLogin() {
        // ...
      }
    }
  });
}

export default {
  name: 'controller-login',
  initialize,
};

然后在您的模板中,您可以根据需要执行<button {{action "doLogin"}}>do login</button>

话虽如此,我强烈建议为此创建组件。 您可以使用ember g component login-button生成一个并放在那里

//components/login-button.js
import Ember from 'ember';

export default Ember.Component.extend({    
  actions: {
    login() {
     // ...
    }
  }
});

它还会为您生成模板:

//templates/components/login-button.hbs
<button {{action 'login'}}>Login</button>

最后,您可以在您的网站中随处使用。

//templates/*.hbs
<div>
    for login click here: {{login-button}}
</div>