仅包含特定视图类型的javascript代码

仅包含特定视图类型的javascript代码,javascript,odoo,odoo-11,Javascript,Odoo,Odoo 11,我只想在用户为res.partner模型创建记录或更新记录时添加javascript代码 我已经尝试使用这种技术包含一个javascript文件(我将在下面解释它的作用): 这很好,我的javascript文件现在包括在内。。。但在任何视图中(不仅针对我的特定合作伙伴创建/更新视图) 问题 我有没有办法告诉odoo为特定的视图类型加载特定的javascript(或者css文件)(在本例中,我希望为base.view\u partner\u formview加载javascript文件)?Oh

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

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


这很好,我的javascript文件现在包括在内。。。但在任何视图中(不仅针对我的特定合作伙伴创建/更新视图)

问题


我有没有办法告诉odoo为特定的视图类型加载特定的javascript(或者css文件)(在本例中,我希望为
base.view\u partner\u form
view加载javascript文件)?

Ohh。。。听起来很糟糕。别担心,我们会尽力解决的

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

new instance.web.Model("res.partner").call()
在callmethod中,您可以调用任何python方法,或者也可以调用视图

2) 也可以通过将url传递到js文件来实现这一点。一种动作url。像这样

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)
获取当前数据集模型


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

如果包含javascript文件,则每次安装模块时,都会将其编译为
web.assets\u backend.js

每次加载后端页面时,都会加载
web.assets\u backend.js
,而不是加载视图时

奥多的设计目的是成为一名优秀的球员。javascript文件在第一页加载时加载


所以我不认为应该这样做(向视图中添加自定义js),而是按照Odoo的方式:通过特定操作触发代码。

您好,您得到答案了吗?我们可以在OdooV8中将特定的模型名传递给js。在jsHello@KevalMehta中有一些方法可以解决这个问题,不幸的是我仍然在等待。如果有人愿意给出答案,请随意添加答案,如果它解决了我的问题,我会将其标记为解决了我的问题。谢谢。如果您包括您的
/my_module/static/src/js/script.js
文件,每次odoo服务启动时,它都会编译到
web.assets\u backend.js
。并且
web.assets\u backend.js
会在每次加载页面时加载,而不仅仅是在加载视图时(Odoo使用某种ajax刷新页面内的模块内容)。
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);
    },