我有一些代码可以引发一个基本的pubsub事件:
export default Ember.Service.extend(ConnectListenersMixin, {
onGetInitial: function() {
this.trigger('listUpdated', payload);
}
最终触发事件的请求来自路由的beforeModel
挂钩:
beforeModel: function() {
this.TodoActions.getTodos();
}
问题是订阅此事件的代码是在组件的init
事件中生成的:
export default Ember.Mixin.create({
connect: Ember.on('init', function(){
// subscribing code
})
});
首次加载应用程序时,会在订阅代码运行之前触发事件。组件初始化后,一切都很好。
有没有办法可以提前初始化组件,以便在引发事件之前全部订阅它们?
我不确定初始化程序可以使用哪些事件,我唯一知道的是registerComponentLookup
,例如
before: 'registerComponentLookup'
无论如何围绕这个?
我尝试不使用proimises而不使用模型钩子,所以请不要建议。我知道这一切。
答案 0 :(得分:0)
当Ember发现需要实例化时,组件会被实例化。如果组件是从Handlebars模板实例化的,那么这很自然地在模型钩子之后,你无能为力。事实上,模型挂钩完成之前,模板甚至不会渲染。
我会看看从控制器进行订阅,让它发出事件,触发组件上的事件,或者只是存储数据,以便组件可以绑定到它。但是,我没有足够的关于您的用例的信息来说明哪个(或者如果有的话)最好。