Odoo Widget 开发教程(二)

本文介绍了Odoo框架中JavaScript模块的定义方式,包括如何避免命名冲突及规范加载顺序。此外,还详细解释了如何利用openerp.web.Class()定义类,并展示了如何创建子类和重写方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Odoo JavaScript 模块

在Odoo框架中,是在组件(addons)中定义Javascript模块,以此避免名字空间的冲突和规范加载顺序。
oepetstore/static/js/petstore.js 包含了一个模块定义:

openerp.oepetstore = function(instance, local) {
local.xxx = ...;
}

在Odoo中,模块以全局变量openerp 的形式定义。函数名必须和模块名一致。 (在示例中为 oepetstore),框架才能找到并自动初始化。
当Odoo加载模块时,将传递两个变量:

  • 第一个变量是当前的Web Client实例。通过它可以访问Odoo定义的很多变量,如翻译、网络服务和其它模块定义的对象。
  • 第二个参数是由web client自动生成的本地名字空间。需要供其它模块访问的对象和变量定义在此名字空间中。

Javascript的类通过调用openerp.web.Class()的excend()方法定义。

var MyClass = instance.web.Class.extend({
say_hello: function() {
console.log("hello");
},
});

Extend()方法使用字典来描述类的方法和静态属性。在这个示例中,它有一个无参数的say_hello 方法。
类的实体通过new操作符生成。

var my_object = new MyClass();
my_object.say_hello();
// print "hello" in the console

可以通过this来访问实体的属性。

var MyClass = instance.web.Class.extend({
say_hello: function() {
console.log("hello", this.name);
},
});

var my_object = new MyClass();
my_object.name = "Bob";
my_object.say_hello();
// print "hello Bob" in the console

类可以通过定义init方法来对实体进行初始化。

var MyClass = instance.web.Class.extend({
init: function(name) {
this.name = name;
},
say_hello: function() {
console.log("hello", this.name);
},
});

var my_object = new MyClass("Bob");
my_object.say_hello();
// print "hello Bob" in the console

可以通过 extend()定义子类

var MySpanishClass = MyClass.extend({
say_hello: function() {
console.log("hola", this.name);
},
});

var my_object = new MySpanishClass("Bob");
my_object.say_hello();
// print "hola Bob" in the console

当重载父类方法时,可以通过 this._super() 来调用父类的方法。

var MySpanishClass = MyClass.extend({
say_hello: function() {
this._super();
console.log("translation in Spanish: hola", this.name);
},
});

var my_object = new MySpanishClass("Bob");
my_object.say_hello();
// print "hello Bob \n translation in Spanish: hola Bob" in the console
### 关于 Odoo 开发教程 Odoo 是一种功能强大的企业资源管理平台,支持高度定制化和扩展性。对于希望进行 Odoo 开发的技术人员来说,掌握其架构设计、模块开发流程以及数据库交互方式是非常重要的。 #### 1. **Odoo 开发环境搭建** 为了开始 Odoo 开发,首先需要设置合适的开发环境。可以通过 Python 的 `pip` 工具安装必要的依赖项[^1]。如果发现依赖包下载速度较慢,可以考虑配置国内镜像源加速安装过程。例如,在 Linux 系统下创建并编辑 `.pip/pip.conf` 文件以指定阿里云或其他可用的镜像地址。 #### 2. **模块结构与开发指南** Odoo 的核心设计理念之一是模块化。每个业务逻辑通常被封装成独立的模块,便于维护和重用。官方提供了详细的开发者手册,涵盖了从基础概念到高级主题的内容[^4]。以下是几个关键点: - **模型定义**: 使用 ORM 定义数据表及其字段关系。 - **视图设计**: 创建 XML 文件描述用户界面布局。 - **控制器实现**: 编写路由处理 HTTP 请求并与前端交互。 ```python class MyModel(models.Model): _name = 'my_module.model' name = fields.Char(string='Name', required=True) # 控制器示例 from odoo import http class MyController(http.Controller): @http.route('/my_module/hello/', auth='public') def hello(self): return "Hello, World!" ``` #### 3. **CMS 网站开发实践** 当利用 Odoo 构建内容管理系统(CMS)时,需注意区分动态与静态组件的研发策略[^3]。由于 Odoo 更擅长处理复杂的商业逻辑而非纯粹展示型页面,因此建议将纯 HTML/CSS/JS 部分单独提取出来完成初步制作之后再集成至系统内部做进一步的功能增强。 #### 4. **SQL 数据库操作最佳实践** 在实际项目中不可避免会涉及到复杂查询或者自定义存储过程等情况。此时应该遵循安全编码原则避免 SQL 注入风险,并充分利用 psycopg2 库所提供的参数绑定机制来简化代码编写难度同时提升执行效率[^4]。 ```sql SELECT id FROM res_partner WHERE active = %s; INSERT INTO my_table (column1, column2) VALUES (%s, %s); UPDATE another_table SET field=%s WHERE condition=%s; DELETE FROM yet_another_table WHERE key_field=%s; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值