Tuesday, 23 October 2018

How to perform some action when clicking on the field of a tree view in Odoo 10?

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