Я создал свой собственный виджет, который будет вызываться в древовидных представлениях следующим образом:
<field name="selected" widget="toggle_switch"/>
Поле selected
имеет тип логический .Я создал класс виджетов, расширяющий класс Column
:
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,
});
},
})
И я зарегистрировал его следующим образом:
var core = require('web.core');
core.list_widget_registry.add('field.toggle_switch', ToggleSwitch);
Код шаблона:
<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>
И это работает, но теперь я хочу изменять значение поля selected
каждый раз, когда пользователь нажимает на основной элемент шаблона, который я создал для виджета.
Проблема в том, чтоЯ не могу этого сделать.Кажется, словарь events
недоступен для класса Column
, и я не могу использовать что-то вроде this.on('click', this, this.on_click);
или this.$el.find(...)
, так как this
приносит только данные field
.
Можеткто-нибудь мне помочь?Должен ли я наследовать от других классов использование событий в моем виджете (на самом деле я пытался, но в каждом случае мой шаблон Qweb просто исчезал из представления дерева ...)?