覆盖 listView 的 _render 函数在 odoo 中不起作用

override the _render function of listView does't work in odoo

这是我的代码。我想根据 rpc 调用的结果更改某些字段的背景颜色。但是只有当我在editsave之间切换模式时才会发生变化。当我打开这条记录时应该会发生变化。

有什么想法吗?

var render = listRender.extend({
        init: function () {
            this._super.apply(this, arguments)
        },
        async _render() {
            const result = this._super.apply(this, arguments);
            var fields = [];
            for (let index in this.arch.children) {
                if (this.arch.children[index].tag === "field") {
                    fields.push({"field_name": this.arch.children[index].attrs.name, "index": index});
                }
            }
            var self = this;
            this.arch.children[36]["attrs"]["class"] = "red_color";
            var infos = await this._rpc({
                model: "purchase.order",
                method: "is_updated",
                args: [{"fields": fields, "id": this.state.res_ids}]
            });
            infos.data.forEach(ele => {
                this.arch.children[parseInt(ele["index"])]["attrs"]["class"] = "red_color";
            })
        },
    });

渲染覆盖不是处理您的问题的正确方法。考虑更改相应的视图:改为“sale.order.form”。 您可以这样找到它:在应用程序设置中,通过在 url 中添加“?debug=1”切换到调试模式,重新加载页面,然后转到新的技术 Menu-tab > 查看。

然后搜索:sale.order.form

...对应于 src/odoo/addons 中的以下 xml 文件:sale/sale_views.xml 或 sale_purchase/sale_views.xml and/or website_sale/sale_order_views.xml

相应的url也必须相似(但id=...不同):

https://yourodoodomain.com/web#id=949&action=28&model=ir.ui.view&view_type=form&cids=1&menu_id=4