JavaScript 扩展在 Odoo 16 树视图中未触发

问题描述 投票:0回答:1

我正在开发用于保险管理的 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>

任何见解或建议将不胜感激!

javascript odoo odoo-16
1个回答
0
投票

将您的

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'
    ]
},
© www.soinside.com 2019 - 2024. All rights reserved.