修补现有的 js 函数但仍然显示

Patching an existing js function but still show up

我用的是odoo11。 我有一个需求是点击删除的时候修改确认内容

我从 Web 插件 basic_controller.js 上一个名为 basic_controller.js 的 js 文件中找到了这个

var BasicController = AbstractController.extend(FieldManagerMixin, {
...
    _deleteRecords: function (ids) {
        var self = this;
        function doIt() {
            return self.model
                .deleteRecords(ids, self.modelName)
                .then(self._onDeletedRecords.bind(self, ids));
        }
        if (this.confirmOnDelete) {
            Dialog.confirm(this, _t("Are you sure you want to delete this record ?"), {
                confirm_callback: doIt,
            });
        } else {
            doIt();
        }
    },
...

并且我从here中找到了补丁方法。 我写了一个新的js文件来打补丁

BasicController.include({
    _deleteRecords: function (ids) {
        this._super.apply(this, arguments);
        var self = this;
        function doIt() {
            return self.model.deleteRecords(ids, self.modelName).then(self._onDeletedRecords.bind(self, ids));
        }
        if (this.confirmOnDelete) {
            Dialog.confirm(this, _t("rewrite content?"), {
                confirm_callback: doIt,
            });
        } else {
            doIt();
        }
    },

})

它会显示我的内容,但在确认或取消之后。 原作者会跟进

如何完全替换原版?

如果您覆盖函数的全部内容。那么你不需要打电话 this._super.apply(this, arguments); 目前它会在您之前创建一个对话框。

JS 文件

odoo.define('mytest.field', function (require) {
'use strict';

var basic_fields = require('web.BasicController');
var Dialog = require('web.Dialog');
var core = require('web.core');

var _t = core._t;

var FieldClearbit = basic_fields.include({
    _deleteRecords: function (ids) {
        var self = this;
        function doIt() {
            return self.model.deleteRecords(ids, self.modelName).then(self._onDeletedRecords.bind(self, ids));
        }
        if (this.confirmOnDelete) {
            Dialog.confirm(this, _t("rewrite content?"), {
                confirm_callback: doIt,
            });
        } else {
            doIt();
        }
    },

})

});

XML 文件

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <template id="assets_backend" name="Rdets" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <script type="text/javascript" src="/mytest/static/src/js/test.js" />
        </xpath>
    </template>

</odoo>

尝试启用资产调试以重新生成 Web 资产。 您很可能需要升级模块才能应用更改。