我想仅在用户创建记录或更新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文件)?
答案 0 :(得分:1)
哦......听起来很糟糕。不用担心我们会尝试解决它。 :)
1)您只需要在模型的js中创建构造函数。像这样:
new instance.web.Model("res.partner").call()
在call方法中,您可以调用任何python方法,也可以调用您的视图。
2)你也可以通过将url传递给你的js文件来做到这一点。一种动作网址。喜欢这个
action_url = _.str.sprintf('/web?db=%s#id=%s&view_type=form&model=res.parnter', db, meeting_id);
3)另一种方法是通过行动。当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)
获取当前数据集模型。
您也可以为此引用基本代码。所有这些方法都有很多例子。
答案 1 :(得分:1)
如果您包含javascript文件,则每次安装模块时都会将其编译为web.assets_backend.js
。
每次加载后端页面时都会加载web.assets_backend.js
,而不是在加载视图时加载。{/ p>
Odoo被设计为SPA。 javascript文件在第一页加载时加载。
所以我不认为这应该通过这种方式完成(将自定义js添加到视图中),但是通过Odoo的方式:通过特定操作触发代码。