You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 16树形视图JavaScript扩展未触发问题求助

Odoo 16保险管理模块JS行点击扩展失效问题

问题概述

开发Odoo 16保险管理模块时,需求为点击insurance.details视图内关联树形视图(claim_ids字段)的任意行,跳转至claim.details理赔详情页。当前JS脚本完全未触发(控制台无"Script called"日志),仅树形视图内的"View Details"按钮可正常跳转。

提供的代码片段

manifest.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>

问题根源

  1. 模型判断错误:树形视图渲染的是claim.details模型(关联字段claim_ids指向理赔记录),原代码中判断this.modelName === "insurance.details"永远不成立。
  2. JS资源加载异常:路径错误、模块未更新或浏览器缓存导致脚本未被注入。
  3. 行点击事件触发条件:Odoo 16中默认树形视图行可能需要额外配置才能触发点击事件。

解决方案

1. 修正JS模型判断逻辑

将模型判断改为claim.details,因为树形视图实际绑定的是理赔模型:

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 === "claim.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);
    },
  });
});

2. 确保JS资源正确加载

  • 核对manifest.py中的资源路径与实际文件路径一致,注意大小写(Odoo对路径大小写敏感)。
  • 重启Odoo服务并更新模块:执行命令odoo-bin -u insurance_management_cybro。
  • 强制刷新浏览器缓存(Ctrl+F5),避免旧资源干扰。

3. 配置树形视图允许行点击

在<tree>标签中添加editable="top"(即使不需要编辑,也能触发行点击事件):

<tree create="true" delete="false" class="claims-in-insurance" editable="top">

4. 验证脚本加载状态

打开浏览器开发者工具(F12),在Sources标签下检查list_controller.js是否已加载。若未加载,重新检查模块安装状态和资源路径。

内容的提问来源于stack exchange,提问作者Kamil Wolski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:02:17