参考
可参考官网例子https://doc.odoo.com/trunk/web/qweb/或
http://thierry-godin.developpez.com/openerp/tutorial-module-creation-pos-modification-english-version/
1 Qweb官方定义
Qweb被用作OpenERP的Web客户端模板引擎。它是一种基于XML的模板语言,同Genshi, Thymeleaf、Facelets模板具有相似并且具有以下特性:
完全在客户端浏览器中完成渲染;
一个模板文件中可以包含多个模板,通常一个模板文件中包含一个模板;
对OpenERP的web组件有很好的支持,也可以用于除开OpenERP web外的其他框架。
2 OpenERP中使用Qweb
2.1 获取Odoo中由Bazaar管理的Qweb例子源代码
bzr branch lp:~niv-openerp/+junk/oepetstore -r 1-Ossl.cert_reqs=none
从python安装路劲下的Script目录中复制项目oepetstore到OpenERP的插件(addons)目录下,启动OpenERP,更新并安装oepetstore模块:
完成后在Chrome浏览器下访问http://localhost:8069/ 依次点击菜单:Pet Store àHome Page
点击无效,系统会提示。
这是由于定义在__openerp__.py文件中定义模块需要加载的petstore.js没被引用到系统。
暂时没找到原因,我用的是odoo_8.0rc1-latest版本,不知道是不是版本从7升级到8后的变化,解决方法:
在模块目录下建立xml文件(名称可随便取如link.xml),通过指定路劲引入js和css,
然后修改模块定义中data内容增加link.xml引用。(至于js和css此处没有生效,可去掉里面的引用)。
link.xml 内容:
<?xml version="1.0"encoding="utf-8"?>
<!-- vim:fdn=3:
-->
<openerp>
<data>
<template id="assets_backend" name="petstore" inherit_id="web.assets_backend">
<xpath expr="."position="inside">
<link rel="stylesheet" href="/oepetstore/static/src/css/petstore.css"/>
<script type="text/javascript"src="/oepetstore/static/src/js/petstore.js"></script>
</xpath>
</template>
</data>
</openerp>
完成后重启系统,升级模块,再次点击菜单:Pet Store àHomePage ,在控制台下出现“petstore home page loaded”则表示模块已经运行成功:
到此Qweb还没开始使用,这仅仅是通过odoo的简单的应用了Widget组件。
官方对Widget定义,参考:https://doc.odoo.com/trunk/web/widget/
class openerp.web.Widget()
这是odoo中所有的可视化组件的基类。它对应于一个MVC视图。它处理部分的网页提供一系列的服务:
通过Qweb进行渲染;
继承关系;
生命周期管理(包括当父对象被删除子类的摧毁);
DOM文档插入操作,通过jQuery插入方法。插入对象可以是任何相应的jQuery方法(一般选择器,DOM节点和jQuery对象)。
2.2 通过Qweb结合Widget组件运用
目标:
点击左侧菜单,查询模块例子中表message_of_the_day的数据,通过Qweb以列表形式呈现。
(通过例子中自带的菜单添加一些假数据)
2.2.1 编写js代码
在static/src/js/petstore.js中添加
// MessageListPage部件扩展自Widget基类
instance.oepetstore.MessageListPage = instance.web.Widget.e