Применяйте настройку 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.
}