仅包含特定视图类型的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);
},