Skip to Content
Menu
This question has been flagged
1 Reply
10081 Views

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

Avatar
Discard
Best Answer

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.  

Avatar
Discard
Author

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

Author

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

Related Posts Replies Views Activity
0
Oct 18
4028
0
Oct 18
7461
3
Dec 23
30688
1
May 21
15822
1
Apr 21
4515