I have created my own widget to be called in tree views this way:
<field name="selected" widget="toggle_switch"/>
The field selected is of type boolean. I created the widget class extending the Column class:
var ListView = require('web.ListView');
var ToggleSwitch = ListView.Column.extend({
template: 'ToggleSwitchSheet',
events: {
'click .slider': 'on_click',
},
init: function() {
this._super.apply(this, arguments);
},
_format: function(row_data, options) {
return QWeb.render(this.template, {
'widget': this,
'row_data': row_data,
'prefix': session.prefix,
});
},
})
And I have registered it this way:
var core = require('web.core');
core.list_widget_registry.add('field.toggle_switch', ToggleSwitch);
The code of the template:
<t t-name="ToggleSwitchSheet">
<label class="switch">
<t t-if="row_data['selected']['value']">
<input type="checkbox" checked="checked"/>
</t>
<t t-if="!row_data['selected']['value']">
<input type="checkbox"/>
</t>
<span class="slider round"></span>
</label>
</t>
And it is working, but now I want to modify the value of the selected field each time the user clicks on the main element of the template I made for the widget.
The problem is that I am not able to do that. It seems that events dictionary is not available for the Column class, and I cannot use something like this.on('click', this, this.on_click); or this.$el.find(...), as this brings only the field data.
Can anyone help me? Should I inherit from other classes to use events in my widget (in fact I have tried, but in every case my Qweb template just disappeared from the tree view...)?
from How to perform some action when clicking on the field of a tree view in Odoo 10?
No comments:
Post a Comment