为每个复选框提供一个唯一的 ID。
使用 Jquery 或 javascript onLoad 或 document.ready 方法禁用该复选框。创建 for 循环并为您的匹配值编写简单的禁用代码。
document.getElementById("myCheck").disabled = true;
我不确定odoo。但我对odoo有一点了解。如果动态数据来自数据库,则必须为此设置一个数据字段。
根据文档,没有多重编辑功能。
复选框选择器添加在ListRenderer
小部件的
_renderSelector函数中,因此您需要重写它以根据条件禁用复选框。
在以下示例中,当
state
(硬编码)字段值等于 draft
时,我们禁用选择复选框。
示例:
odoo.define('web.CustomListRenderer', function (require) {
"use strict";
var ListRenderer = require('web.ListRenderer');
ListRenderer.include({
_renderRow: function (record) {
var self = this;
var tr = this._super(record);
tr.find("input[type='checkbox']").prop('disabled', record.data.state == 'draft');
return tr;
},
});
});
您可以在操作上下文中传递评估域,然后使用当前记录值在
_renderSelector
函数中评估该域。
我们在init
函数中初始化
domain,并使用compute函数得到评估结果:
odoo.define('web.CustomListRenderer', function (require) {
"use strict";
var ListRenderer = require('web.ListRenderer');
var Domain = require('web.Domain');
ListRenderer.include({
init: function (parent, state, params) {
this._super.apply(this, arguments);
if (state.context.selection_domain) {
this.domain = new Domain(state.context.selection_domain, state.context);
}
},
_renderRow: function (record) {
var self = this;
var tr = this._super(record);
if (record.evalContext.selection_domain) {
tr.find("input[type='checkbox']").prop('disabled', this.domain.compute(record.data));
}
return tr;
},
});
});
您需要将
selection_domain
添加到操作上下文中:
{..., 'selection_domain': [('state', '=', 'draft')]}
查看资产管理文档以了解如何将上述 JavaScript 代码添加到 Web 资产中,您还可以在在资产包中添加文件部分查看示例。
感谢您分享此解决方案!我注意到它与 Odoo 14 和 Odoo 15 兼容。有人为 Odoo 17 改编过此代码吗?或者是否有可用的更新版本?任何有关使其与 Odoo 17 兼容的指导将不胜感激。