我正在开发用于保险管理的 Odoo 16 模块,并且遇到了 JavaScript 扩展未按预期触发的问题。我的目标是,当单击 Insurance.details 视图中树视图中的任何字段时,用户将被重定向到保险索赔的详细视图,但该脚本似乎根本没有被调用。
当单击 Insurance.details 视图中的树视图中的一行时,我希望触发 JavaScript 方法 _onRowClicked。如果模型是“insurance.details”,则应打开 Claim.details 表单。然而,当点击字段时,脚本似乎根本没有被执行;控制台日志“脚本调用”永远不会出现在浏览器的控制台中。单击“查看详细信息”按钮会正确触发到 Claim.details 表单的转换,但这不是我想要的整体行为,因为我需要整行都可单击。
清单.py:
{
'name': 'Insurance Management',
'version': '16.0.1.1.1',
'summary': """Insurance Management & Operations""",
'description': """Insurance Management""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'category': 'Industries',
'depends': ['account', 'base', 'crm', 'web'],
'license': 'AGPL-3',
'data': [
'security/ir.model.access.csv',
'data/insurance_management_data.xml',
'views/claim_details_views.xml',
'views/employee_details_views.xml',
'views/insurance_details_views.xml',
'views/policy_details_views.xml',
'views/insurance_management_menus.xml',
'views/crm_lead_views.xml'
],
'images': ['static/description/banner.png'],
'installable': True,
'application': True,
'auto_install': False,
'assets': {
'web.assets_backend': [
'/insurance_management_cybro/static/src/css/styles.css',
'/insurance_management_cybro/static/src/js/list_controller.js'
]
},
}
list_controller.js
odoo.define("insurance_management_cybro.list_controller", function (require) {
"use strict";
console.log("Script called");
var ListController = require("web.ListController");
ListController.include({
_onRowClicked: function (event) {
console.log("Row clicked", event);
if (this.modelName === "insurance.details") {
var action = {
type: "ir.actions.act_window",
view_type: "form",
view_mode: "form",
res_model: "claim.details",
views: [[false, "form"]],
target: "current",
res_id: event.data.id,
};
return this.do_action(action);
}
this._super.apply(this, arguments);
},
});
});
insurance_details_views.xml
<page string="Claims">
<field name="claim_ids" id="add_claim" context="{'default_policy_number': policy_number, 'default_force_readonly': True}">
<tree create="true" delete="false" class="claims-in-insurance">
<button name="open_claim_action" string="View Details" type="object" class="oe_highlight"/>
<field name="external_claim_number" optional="show"/>
<field name="date_claimed" optional="show"/>
<field name="claim_status" optional="show"/>
<field name="cause_of_claim" optional="show" />
<field name="detailed_cause" optional="show" />
<field name="total_claim_amount" optional="show" />
</tree>
</field>
</page>
任何见解或建议将不胜感激!
将您的
list_controller.js
替换为以下 list_renderer.js
。
/** @odoo-module **/
import { ListRenderer } from "@web/views/list/list_renderer";
import { patch } from "@web/core/utils/patch";
patch(ListRenderer.prototype, 'insurance_management.renderer', {
focusCell(column, forward = true) {
console.log('RowClicked')
this._super(column, forward);
}
})
您可以使用
focusCell
或单击列表中的行时调用的任何其他函数,因为每次单击行时都会调用此函数。
其次,按照如下所示修复您的清单;之前的版本前面有
/
,这导致脚本文件无法正确加载。
'assets': {
'web.assets_backend': [
'insurance_management_cybro/static/src/js/list_renderer.js'
]
},