Odoo Widget 开发教程(二)
2015-08-30 11:15
393 查看
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
相关文章推荐
- Mybatis学习笔记(二)配置文件
- 方向
- 记录
- 动态调用dll
- 在QT5中搭建SDL2环境以及显示bmp图片
- Bootstrap下载与使用
- jQuery实现CheckBox全选、全不选
- JDK安装及环境变量配置
- delphi 窗体的创建和释放
- HDU5424Rikka with Graph II(哈密顿图判断)
- 彩票
- 2015-08-30-Mac-拉取远程私有服务器的git仓库
- 一个简单的程序,统计文本文档中的单词和汉字数,逆序排列(出现频率高的排在最前面)。python实现。
- 腾讯的一个试题---36辆赛车,6个跑道,最少比赛次数,取得前三名
- ClassTag 、Manifest、ClassManifest、TypeTag代码实战及其在Spark中的应用源码解析之Scala学习笔记-37
- 惠普体验
- Ubuntu15.04安装搜狗输入法
- 用栈操作实现队列的操作
- js获取表单值的两种方法
- Linux下nc的参数详解