JS доступ и наследование

action_button

Здесь вы найдете объяснение того, как получить / наследовать POS-объекты action_button.

Например, у нас есть определение в этом файле <https://github.com/odoo/odoo/blob/9.0/addons/pos_reprint/static/src/js/reprint.js#L1>`_

odoo.define('pos_reprint.pos_reprint', function (require) {
...
screens.define_action_button({
    'name': 'guests',
    'widget': TableGuestsButton,
    'condition': function()

Это определение не возвращает класс ReprintButton. Таким образом, мы не можем наследовать это обычным способом.

Чтобы достичь этого объекта, нам нужно получить его экземпляр, используя `` gui``. Тогда мы можем унаследовать это

Чтобы понять, на что это похоже, посмотрите пример, где гости отображают кнопки с номерами:

this.gui.screen_instances['products'].action_buttons['guests'].renderElement();

Хотя вы можете выполнять вызов и даже заменять функцию новой, вы не можете создавать наследование с помощью функций `` extend`` или `` include``. Это потому, что мы не можем добраться до класса и получить доступ только к экземпляру этого класса.

Такой подход имеет смысл только для тех виджетов:

DiscountButton
ReprintButton
TableGuestsButton
SubmitOrderButton
OrderlineNoteButton
PrintBillButton
SplitbillButton
set_fiscal_position_button

screen_classes

Чтобы создать новый экранный виджет (с помощью метода extend ()) или изменить существующий экранный виджет (с помощью метода include ()), вам нужен целевой класс. Обычно вы можете получить этот класс, используя следующий код:

odoo.define('module_name.file_name', function (require) {
"use strict";

var screens = require('point_of_sale.screens');

screens.OrderWidget.include({
    ...

Но это доступно только для виджетов, которые возвращаются основной функцией в файле &quot;point_of_sale / static / src / js / screens.js&quot;.

** Список экранов: **

  • ReceiptScreenWidget
  • ActionButtonWidget
  • define_action_button
  • ScreenWidget
  • PaymentScreenWidget
  • OrderWidget
  • NumpadWidget
  • ProductScreenWidget
  • ProductListWidget

В других случаях вы можете получить целевой класс экранного виджета, используя следующий код:

odoo.define('module_name.file_name', function (require) {
"use strict";

var gui = require('point_of_sale.gui');

gui.Gui.prototype.screen_classes.filter(function(el) { return el.name == 'clientlist'})[0].widget.include({
    ...

Список экранов, доступных через `` screen_classes``:

gui.define_screen({name: 'scale', widget: ScaleScreenWidget});
gui.define_screen({name: 'products', widget: ProductScreenWidget});
gui.define_screen({name: 'clientlist', widget: ClientListScreenWidget});
gui.define_screen({name: 'receipt', widget: ReceiptScreenWidget});
gui.define_screen({name: 'payment', widget: PaymentScreenWidget});
gui.define_screen({name: 'bill', widget: BillScreenWidget});
gui.define_screen({'name': 'splitbill', 'widget': SplitbillScreenWidget,
gui.define_screen({'name': 'floors', 'widget': FloorScreenWidget,