1

我只想在用户为res.partner模型创建记录或更新记录时添加 javascript 代码。

我已经尝试使用这种技术包含一个 javascript 文件(我将在下面解释它的作用):

<odoo>
    <data>
        <template id="my_module_script" name="my module script" inherit_id="web.assets_backend">
            <xpath expr="." position="inside">
                <script type="text/javascript" src="/my_module/static/src/js/script.js"></script>
            </xpath>
        </template>
    </data>
</odoo>

这很好用,我的 javascript 文件现在包含在任何视图中(不仅适用于我的特定合作伙伴创建/更新视图)。

问题

有什么方法可以告诉 odoo 为特定的视图类型加载特定的 javascript(或 css 文件)(我想在这个例子中为base.view_partner_form视图加载 javascript 文件)?

4

2 回答 2

1

哦...这听起来很糟糕。不用担心,我们会尽力解决它。:)

1)您只需要在模型的 js 中创建一个构造函数。像这样:

new instance.web.Model("res.partner").call()

在调用方法中,您可以调用任何 python 方法,也可以调用您的视图。

2)你也可以通过将url传递给你的js文件来做到这一点。动作网址的种类。像这样

action_url = _.str.sprintf('/web?db=%s#id=%s&view_type=form&model=res.parnter', db, meeting_id);

3) 另一种方法是传递动作。Whrn url 被重定向到那个,然后这个动作被从 js 调用。

on_follower_clicked: function  (event) {
        event.preventDefault();
        var partner_id = $(event.target).data('partner');
        var state = {
            'model': 'res.partner',
            'id': partner_id,
            'title': this.record_name
        };
        session.webclient.action_manager.do_push_state(state);
        var action = {
            type:'ir.actions.act_window',
            view_type: 'form',
            view_mode: 'form',
            res_model: 'res.partner',
            views: [[false, 'form']],
            res_id: partner_id,
        }
        this.do_action(action);
    },

4)您还可以通过this.model这将返回当前模型也new instance.web.Model(self.dataset.model) 获取当前数据集模型来获取当前模型。

您也可以为此参考基本代码。所有这些方法都有很多示例。

于 2018-01-16T11:01:52.930 回答
1

如果您包含您的 javascript 文件,它将在web.assets_backend.js每次安装模块时编译。

并且web.assets_backend.js在每次加载后端页面时加载,而不是在加载视图时加载。

Odoo 被设计成一个SPA。javascript 文件在第一个页面加载时加载。

所以我认为这不应该通过这种方式来完成(将自定义 js 添加到视图中),而是通过 Odoo 的方式:通过特定操作触发您的代码。

于 2018-04-12T04:02:58.843 回答