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

如何在Odoo14树形视图中点击任意记录时弹出弹窗

在Odoo14树形视图实现点击记录弹窗功能

1. 准备自定义模块(无则新建)

先确认你有一个具备基础结构的自定义模块,目录至少包含 __manifest__.py、models/、views/,没有的话先按Odoo模块规范创建。

2. 编写JS扩展逻辑

在模块下创建 static/src/js/tree_view.js 文件,重写树形视图的行点击事件:

odoo.define('你的模块名.tree_view_extend', function(require) {
    "use strict";

    var ListController = require('web.ListController');
    var ListView = require('web.ListView');
    var viewRegistry = require('web.view_registry');

    // 继承原控制器,修改行点击行为
    var CustomListController = ListController.extend({
        _onRowClicked: function (ev) {
            // 保留原有的选中逻辑(可选,不需要可删除)
            this._super.apply(this, arguments);
            
            // 获取点击的记录数据
            var record = ev.data.record;
            
            // 示例1:弹出简单提示弹窗
            this.do_notify('提示', `点击了记录:ID-${record.data.id},名称-${record.data.display_name}`);

            // 示例2:弹出表单视图弹窗(如需复杂内容用这个)
            /*
            this.do_action({
                type: 'ir.actions.act_window',
                res_model: record.model,
                res_id: record.data.id,
                views: [[false, 'form']],
                target: 'new',
                title: '记录详情',
            });
            */
        },
    });

    // 绑定自定义控制器到树形视图
    var CustomListView = ListView.extend({
        config: _.extend({}, ListView.prototype.config, {
            Controller: CustomListController,
        }),
    });

    // 注册自定义视图类型
    viewRegistry.add('custom_tree_view', CustomListView);

    return {
        CustomListController: CustomListController,
        CustomListView: CustomListView,
    };
});

3. 注册JS资源

在模块的 __manifest__.py 中添加JS文件路径,让Odoo加载它:

{
    'name': '树形视图弹窗扩展',
    'version': '1.0',
    'depends': ['base', 'web'],
    'data': [
        # 后续添加视图XML文件路径
    ],
    'assets': {
        'web.assets_backend': [
            '你的模块名/static/src/js/tree_view.js',
        ],
    },
    'installable': True,
    'auto_install': False,
}

4. 修改目标树形视图

找到你要修改的模型树形视图XML文件(比如 views/目标模型_view.xml),把视图类型指定为我们自定义的 custom_tree_view:

<record id="目标模型_tree_view" model="ir.ui.view">
    <field name="name">目标模型.tree.view</field>
    <field name="model">你的目标模型名</field>
    <field name="arch" type="xml">
        <tree string="目标模型列表" js_class="custom_tree_view">
            <!-- 原树形视图的字段定义保留 -->
            <field name="name"/>
            <field name="其他字段"/>
        </tree>
    </field>
</record>

5. 生效配置

重启Odoo服务,升级你的自定义模块,之后点击树形视图的任意记录就能触发弹窗了。

注意事项

  • 把代码里的「你的模块名」「你的目标模型名」替换成实际名称
  • 弹窗内容可以根据需求修改,比如调用自定义模板、加载其他视图等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:30:32