Применяйте настройку JS только для пользовательских модулей или представлений - Odoo

Я хотел бы добавить в свой пользовательский модуль настраиваемый вид списка, поэтому я поступил следующим образом:

my_custom_module.js:

odoo.define('my_custom_module', function(require){
    'use strict';
    var core = require('web.core');
    var List = core.view_registry.get('list');
    var QWeb = core.qweb;
    List.List.include({
        render: function () {
            var self = this;
            this.$current.html(
                QWeb.render('ListView.rows', _.extend({}, this, {
                        render_cell: function () {
                            return self.render_cell.apply(self, arguments); }
                    })));
            this.pad_table_to(1);
        },
    });
});

И в моем XML:

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <template id="assets_backend" name="my_custom_module assets" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <script src="/my_custom_module/static/src/js/my_custom_module.js" type="text/javascript" />
        </xpath>
    </template>
</odoo>

Но проблема в том, что это относится ко всем моим модулям Odoo!

Как я могу указать, что настройка применима только к моему my_custom_module?

Спасибо за помощь:)

1 ответ

Используя List.List.include({ ... Вы расширяете уже существующую функциональность виджета List. Что вам нужно сделать, это создать свой собственный виджет, который расширяет список и назначить его на ваш вид

Если вы не хотите, чем, и вы хотите продолжить подход, который у вас уже есть, вы можете вставить элемент к вашему представлению, который будет использоваться как ловушка, которую вы можете использовать, как ловушка, чтобы вы могли применить изменения только к вашему Просмотры. Например, вставьте элемент в вашем представлении:

<div style="visibility: hidden" id="my_view" />

И тогда в вашем JavaScript:

if ($( "#my_view" ).length) {

// your element exists, that means the javascript code runs on your view and your custom code should be executed.

} else {

// another list is being rendered and you should not run any custom code.
}
Другие вопросы по тегам