javascript - Odoo 更改基本 JavaScript 方法

标签 javascript class odoo odoo-10

Odoo中有一个文件:addons/mail/static/src/js/chatter.js 。它包含一个我想更改的方法:message_get_suggested_recipients .

为此,我创建了一个带有文件的插件:

chatter.xml

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

chatter.js

odoo.define('addon1.chatter', function(require){
'use strict';

var OdooChatter = require('mail.Chatter');

OdooChatter.include({
    message_get_suggested_recipients: function () {
    var self = this;
    var email_addresses = _.pluck(this.suggested_partners, 'email_address');
    return this.thread_dataset
        .call('message_get_suggested_recipients', [[this.context.default_res_id], this.context])
        .done(function (suggested_recipients) {
            var thread_recipients = suggested_recipients[self.context.default_res_id];
            _.each(thread_recipients, function (recipient) {
                var parsed_email = utils.parse_email(recipient[1]);
                if (_.indexOf(email_addresses, parsed_email[1]) === -1) {
                    self.suggested_partners.push({
                        checked: recipient[3] || true,
                        partner_id: recipient[0],
                        full_name: recipient[1],
                        name: parsed_email[0],
                        email_address: parsed_email[1],
                        reason: recipient[2],
                    });
                }
            });
        });
    }
});
});

我可以看到 Odoo 网站打开时加载了 javascript,但是断点没有捕捉到正确的位置,这意味着加载的 javascript 无效。

由于未调用我提供的方法(而是调用原始方法),如何更改方法?

最佳答案

将 chatter.xml 文件修改为:

<template id="your_module.assets_backend" inherit_id="web.assets_backend" name="Your custome name">
    <xpath expr="//script[@src='/mail/static/src/js/chatter.js']" position="after">
        <script type="text/javascript" src="/addon1/static/src/js/chatter.js"></script>
    </xpath>
</template>

这对于我在 Odoo 11 上的情况有效。对于您的情况 (Odoo 10),它也应该有效。

<小时/>

重新查看 Odoo 的源代码后,因为您想覆盖 message_get_suggested_recipients ,它是 mail.composer.BasicComposer 的支柱(而不是mail.Chatter)我认为你的include应该是:

var composer = require('mail.composer');

var ChatterComposer = composer.BasicComposer.include(
    // This goes your work of message_get_suggested_recipients rewrite.
);

关于javascript - Odoo 更改基本 JavaScript 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49875355/

相关文章:

python - python中从列表中查找具有特定属性值的对象的最快方法?

unit-testing - Odoo 9 没有运行测试

javascript - 使用 jQuery 或 JavaScript 访问表单中的元素(或其他包含元素)

javascript - 无法从 "aws-amplify"解析 "App.js"

javascript - Highcharts - 列颜色与图例中的颜色不同

java - StackOverflowError 不知道出了什么问题

javascript - 单击另一个图像时检索图像源?

java - 调用类实例时线程访问无效

python - 从 odoo 中备份 Odoo 数据库

python - 将 _constraints 更改为 _sql_constraints - Odoo v8 到 Odoo v10 社区