我试图在组件内部的一个控制器中使用一个方法但是必须出错。
我的路线/calendars
有自己的控制器(controllers/calendars.js
)和模板(templates/calendars.hbs
)
在calendars.hbs
内部,我已经实现了一系列组件,其中包含用于我的应用主屏幕和菜单的模板。在菜单中,我有最后一个组件应该调用日历'控制器方法。
import Ember from 'ember';
export default Ember.Controller.extend({
actions:{
createCalendar: function(){
console.log("app/controllers/calendars.js");
}
}
});
import Ember from 'ember';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
export default Ember.Route.extend(AuthenticatedRouteMixin,{
model: function(params) {
return [
{id:"1", name:"Calendario de trabajo", shared:false, position: 0},
{id:"2", name:"Calendario personal", shared:false, position: 1},
];
},
actions:{
createCalendar: function(calendar){
console.log("app/routes/calendars.js");
}
}
});
import Ember from 'ember';
export default Ember.Component.extend({
calendars: Ember.inject.controller("calendars");
actions: {
createCalendar: function(){
console.log("app/components/menu/calendar-dock-footer.js");
this.calendars.createCalendar();
}
}
});
{{#main-template}}
{{#link-to "calendars.new" (query-params posX=150 posY=50)}} Show me the money! {{/link-to}}
{{outlet}}
{{calendars.full-calendar size="calendar" action="createEvent"}}
{{/main-template}}
...
{{menu.main-dock}}
...
...
{{menu.calendar-dock-footer}}
...
<div class="row ht-calendar-footer-content">
<button class="btn btn-sm btn-info" {{action 'createCalendar'}}>
<label> Add Calendar</label>
</button>
</div>
我试图将操作从calendars.hbs传递到带有按钮的组件,然后运行但我需要使用按钮从组件中调用calendars.js中的方法。
答案 0 :(得分:2)
在组件的控制器中使用sendAction('createCalendar',params)
。您的组件控制器无法了解您日历中的控制器。这是Mirza Memic在您的评论中提到的行动数据降低原则。您可以处理路线中的操作。如果您熟悉从组件级别(从组件 - &gt;路由)开始向数据库发送查询,则原则相同。
http://emberjs.com/api/classes/Ember.Component.html#method_sendAction
答案 1 :(得分:1)
您无法将控制器注入组件。当你想做这样的事情时,Ember宁愿你使用服务在两个实体之间进行通信。
或者,您可以在模板中实例化控制器时将控制器传递到组件中。这是一个骗子,但我喜欢这样做。
my-component controller=this
此外,您可以使用sendAction(),然后使用sendAction(),然后处理路径中的动作冒泡。
选择对你最有意义的方式。