如何在树形视图点击“新增”按钮时自动聚焦指定字段?
解决Odoo one2many树形视图新增行默认聚焦第二个字段的问题
Odoo原生没有提供直接的XML参数或属性来控制可编辑树形视图新增行后的默认聚焦字段,需要通过自定义JavaScript代码实现需求。
实现步骤:
给树形视图添加自定义类
修改你的树形视图XML代码,新增一个自定义类(比如focus-second-field)来标识需要处理的视图:<tree editable="bottom" class="check_class focus-second-field"> <field name="check" class="oe_edit_only" string="&#160;"/> <field name="description" decoration-crossed="check == True" string="Чек лист"/> </tree>编写自定义JS逻辑
在模块的static/src/js/目录下创建一个JS文件(比如focus_custom.js),重写列表控制器的_renderEdit方法,监听新增行事件并聚焦到第二个字段:odoo.define('your_module.focus_custom', function(require) { "use strict"; var ListController = require('web.ListController'); var ListView = require('web.ListView'); var viewRegistry = require('web.view_registry'); var CustomListController = ListController.extend({ _renderEdit: function () { this._super.apply(this, arguments); if (this.$el.hasClass('focus-second-field')) { // 定位到新增行的第二个字段输入框 var $newRow = this.$('.o_list_view .o_data_row:last'); var $targetField = $newRow.find('.o_field_widget:eq(1) input'); if ($targetField.length) { // 延迟执行确保DOM已渲染完成 setTimeout(() => $targetField.focus(), 100); } } }, }); var CustomListView = ListView.extend({ config: _.extend({}, ListView.prototype.config, { Controller: CustomListController, }), }); viewRegistry.add('focus_second_field_tree', CustomListView); });在模块清单中加载JS文件
修改模块的__manifest__.py,将上述JS文件添加到后端资源中:{ # 其他清单配置... 'assets': { 'web.assets_backend': [ 'your_module/static/src/js/focus_custom.js', ], }, }
注意事项
- 替换代码中的
your_module为你实际的模块名称 - 若视图结构有调整,需要修改JS中的选择器(比如
.o_field_widget:eq(1))确保精准定位到目标字段
内容的提问来源于stack exchange,提问作者Wald Sin
相关产品推荐
相关产品推荐

