콘텐츠로 건너뛰기
메뉴
커뮤니티에 참여하려면 회원 가입을 하시기 바랍니다.
신고된 질문입니다
1 회신
10253 화면

Has anyone known about custom_events in Odoo 12 javascript? also how to call or trigger a custom_events?

example\ https://github.com/odoo/odoo/blob/12.0/addons/web/static/src/js/fields/basic_fields.js#L153

아바타
취소
베스트 답변

Odoo has a custome_event the same HTML as the DOM event.

The difference is DOM event bubble up through DOM nodes while odoo custom_event bubble up thought odoo inheritance (parent/child widget) chain.

The main purpose of the custom_events is widget decupling (loos binding) so there is no hardcoded dependency between child to parent and the widget can move around freely while structure change. child widget just triggers custom_event and it's parents responsibility to listen to an event and react upon it.

Before custom_event there are several instances where a child call parent using ugly code like this.get_parent().get_parent().call_method()

Post here if you need an example or more explanation 
=================== 
`field_change` custom_event trigger_up from here


var GrandParentWidget = Widget.extend({
       custom_events: {
            my_custom_event : '_onMyCustomEvent',
      },
     _onMyCustomEvent: function(ev) {
          console.log('event triggred', ev.data)
     }                                                      
})

var ParentWidget = GrandParentWidget.extend({
           .......
})

var ChildWidget = ParentWidget.extend({
      'click .my_link': '_onLinkClick'
      _onLinkClick: function () {
             this.trigger_up('my_custom_event', {data: {}}  
      }
})                                                                                                                                                                                                           

In the above example ChildWidget trigger_up`my_custome_event' and it will listen by GrandParent up in the inheritance chain.  

아바타
취소
작성자

Thanks for answering

So, if the class has custom_events like:

custom_events: _.extend({}, DebouncedField.prototype.custom_events, {

field_changed: '_onFieldChanged',

}),

I still confuse how and when the event is fired

I have update the answer

작성자

Oh I see. Thank you very much Ravi. It's very clear explanation

관련 게시물 답글 화면 활동
0
10월 18
4163
0
10월 18
7621
3
12월 23
30916
1
5월 21
15948
1
4월 21
4713