我需要有可以从我的所有车把模板访问的全局操作doLogin {{ action "doLogin" }}
有没有办法实现这个,或者我可能需要在我的ember-cli应用程序上创建全局控制器?
答案 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>