使用oe_kanban_global_click时如何点击看板卡片跳转至树视图
修改Odoo看板卡片跳转视图的方法
针对你提到的两个问题——如何通过oe_kanban_global_click链接到其他视图,以及默认跳表单视图改为树视图,我给你两种实用的解决方案:
方法一:自定义点击事件(推荐,不影响其他看板)
默认的oe_kanban_global_click是Odoo内置的触发表单跳转的类,我们可以移除它,换成自定义的点击逻辑:
1. 修改看板模板
把原模板中的oe_kanban_global_click替换成自定义类(比如custom-kanban-click),同时绑定记录ID到数据属性:
<templates> <t t-name="kanban-box"> <!-- 移除oe_kanban_global_click,添加custom-kanban-click和data-id --> <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card custom-kanban-click" t-att-data-id="record.id.raw_value"> <div class="o_kanban_record_bottom"> <div class="oe_kanban_bottom_left"> <span><strong>Weather: </strong><t t-esc="record.weather.raw_value"/></span> </div> </div> <!-- 其他看板内容 --> </div> </t> </templates>
2. 编写JS绑定点击事件
创建一个JS文件,继承看板组件并自定义点击行为,这里以跳转到树视图为例:
odoo.define('your_module.custom_kanban_click', function(require) { "use strict"; var KanbanRecord = require('web.KanbanRecord'); KanbanRecord.include({ // 扩展事件绑定 events: _.extend({}, KanbanRecord.prototype.events, { 'click .custom-kanban-click': '_onCustomKanbanClick', }), _onCustomKanbanClick: function(e) { e.stopPropagation(); // 替换成你的模型名,比如'your.model.name' const modelName = 'res.partner'; const recordId = parseInt($(e.currentTarget).data('id')); // 触发跳转动作 this.do_action({ type: 'ir.actions.act_window', res_model: modelName, views: [[false, 'tree']], // 指定树视图,false表示用默认树视图 domain: [['id', '=', recordId]], // 过滤当前记录,不需要可以删除此行 target: 'current', // 当前标签页打开,可选'new'新开标签 }); }, }); return KanbanRecord; });
3. 配置资源引入
在模块的__manifest__.py中引入这个JS文件:
{ 'name': 'Your Module', 'version': '1.0', 'depends': ['web'], 'data': [ 'views/your_kanban_view.xml', ], 'assets': { 'web.assets_backend': [ 'your_module/static/src/js/custom_kanban.js', ], }, }
方法二:覆盖默认的_onGlobalClick方法
如果你想保留oe_kanban_global_click类,直接修改它的默认行为,可以覆盖看板组件的_onGlobalClick方法:
odoo.define('your_module.override_global_click', function(require) { "use strict"; var KanbanRecord = require('web.KanbanRecord'); KanbanRecord.include({ _onGlobalClick: function(e) { e.stopPropagation(); // 只针对指定模型修改行为,避免影响其他看板 if (this.modelName === 'your.model.name') { this.do_action({ type: 'ir.actions.act_window', res_model: this.modelName, views: [[false, 'tree']], // 跳转树视图 domain: [['id', '=', this.record.id.raw_value]], target: 'current', }); } else { // 其他模型保留默认跳转表单的行为 this._super.apply(this, arguments); } }, }); return KanbanRecord; });
通用跳转其他视图的方法
如果要跳转到日历视图、看板视图或自定义视图,只需要修改views参数:
- 跳日历视图:
views: [[false, 'calendar']] - 跳自定义表单视图(指定视图ID):
views: [[123, 'form']](123是目标视图的数据库ID) - 打开无过滤的树视图:删除
domain参数,或者设为domain: []
内容的提问来源于stack exchange,提问作者user_123
相关产品推荐
相关产品推荐

