修补现有的 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 资产。
您很可能需要升级模块才能应用更改。
我用的是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 资产。 您很可能需要升级模块才能应用更改。