Odoo一个简单的Client Action示例

总览

这个示例将创建一个菜单,点击触发一个客户端动作,关联js定义的对象,显示相应模板

这个示例包括下面三个文件
mark

  • 模板文件static/src/xml/client_action.xml
    • 定义模板HelloJS显示<div>Display HelloJS</div>
  • JS文件static/src/js/client_action.js
    • 定义对象HomePage继承于web.AbstractAction
    • 对象中调用HelloJS模板
    • 对象中定义init方法和start方法
    • HomePage对象注册为动作:HelloJS_tag
  • 视图文件views/client_action.xml
    • 继承web.assets_backend加载JS文件
    • 定义客户端动作关联HelloJS_tag
    • 定义显示的菜单关联客户端动作

示例文件内容

1、定义模板文件static/src/xml/client_action.xml

1
2
3
4
5
6
<?xml version="1.0"  encoding="UTF-8"?>
<templates xml:space="preserve">
<t t-name="HelloJS">
<div>Display HelloJS</div>
</t>
</templates>

2、定义JS文件static/src/js/client_action.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
odoo.define('hello.js', function (require) {
"use strict";

var Widget = require('web.Widget');
var core = require('web.core');
var utils = require('web.utils');
var AbstractAction = require('web.AbstractAction');

var HomePage = AbstractAction.extend({
template: "HelloJS",

init: function (parent) {
this._super(parent);
console.log("Hello JS, I'm inside of init.");
},

start: function () {
console.log("Hello JS, I'm inside of start.");
},
});

core.action_registry.add('HelloJS_tag', HomePage);

return HomePage;
});

3、创建视图文件views/client_action.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>

<template id="assets_backend" name="petstore"
inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript"
src="demo_client_action/static/src/js/client_action.js">
</script>
</xpath>
</template>

<record id="hellojs_id" model="ir.actions.client">
<field name="name">HelloJS</field>
<field name="tag">HelloJS_tag</field>
</record>

<menuitem id="hellojs_menu"
name="HelloJS"
action="hellojs_id"/>
</data>
</odoo>

4、在__manifest__.py文件中引入XML文件

1
2
3
4
5
6
'qweb': [
'static/src/xml/client_action_template.xml'
],
'data': [
'views/client_action.xml'
],