仅包含特定视图类型的 javascript 代码
include a javascript code only for a certain view type
我只想在用户为 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 文件现在包含在内...但在任何视图中(不仅是我的特定合作伙伴 create/update 视图)。
问题
有什么方法可以告诉 odoo 为特定的视图类型加载特定的 javascript(或 css 文件)(我想在这个例子中 javascript 为 base.view_partner_form
视图加载的文件)?
哦...听起来很糟糕。别担心,我们会尽力解决它。 :)
1) 你只需要在模型的js中创建一个构造函数。像这样:
new instance.web.Model("res.partner").call()
在调用方法中,您可以调用任何 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
获取当前模型 这将 return 当前模型也 new instance.web.Model(self.dataset.model)
获取当前数据集模型。
您也可以为此参考基本代码。所有这些方法都有很多示例。
如果包含 javascript 文件,每次安装模块时都会将其编译为 web.assets_backend.js
。
并且 web.assets_backend.js
在每次加载后端页面时加载,而不是在加载视图时加载。
Odoo 被设计成 SPA。 javascript 个文件在第一页加载时加载。
所以我认为这不应该通过这种方式完成(将自定义 js 添加到视图),而是通过 Odoo 的方式:通过特定操作触发代码。
我只想在用户为 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 文件现在包含在内...但在任何视图中(不仅是我的特定合作伙伴 create/update 视图)。
问题
有什么方法可以告诉 odoo 为特定的视图类型加载特定的 javascript(或 css 文件)(我想在这个例子中 javascript 为 base.view_partner_form
视图加载的文件)?
哦...听起来很糟糕。别担心,我们会尽力解决它。 :)
1) 你只需要在模型的js中创建一个构造函数。像这样:
new instance.web.Model("res.partner").call()
在调用方法中,您可以调用任何 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
获取当前模型 这将 return 当前模型也 new instance.web.Model(self.dataset.model)
获取当前数据集模型。
您也可以为此参考基本代码。所有这些方法都有很多示例。
如果包含 javascript 文件,每次安装模块时都会将其编译为 web.assets_backend.js
。
并且 web.assets_backend.js
在每次加载后端页面时加载,而不是在加载视图时加载。
Odoo 被设计成 SPA。 javascript 个文件在第一页加载时加载。
所以我认为这不应该通过这种方式完成(将自定义 js 添加到视图),而是通过 Odoo 的方式:通过特定操作触发代码。