您的位置:首页 > Web前端 > JavaScript

OE模块中js方法初始化

2014-01-22 17:57 225 查看
OE模块中都可以自定义js或修改官方的js内容,之前一直不明白自定义的js方法是在哪里进行初始化的。昨天为了追踪一个问题,仔细阅读了oe的js核心处理脚本,对自定义模块js的初始化有了一个初步了解,现记录如下,以供参考。

假设自定义模块名为“vnsoft”,如果模块需要有js,则在模块中需要定义如下目录结构:

addons/vnsoft/static/src/js/       js文件名随便取,假设为data.js

在data.js中,代码格式为:

openerp.vnsoft = function(instance){
--自定义js内容
}

其中openerp.vnsoft中的"vnsoft"就是模块名称,这两者要一致,不然无法初始化。

js文件建立好以后,需要告诉openerp在启动时加载,这个是在模块的__openerp__.py文件中定义,如:

{
'js' : ["static/src/js/data.js"],
}

OE在启动时,如果模块有安装,则会加载指定的js文件内容,但这个时候还只是加载了一个定义,并没有初始化。初始化动作是在addons/web/static/src/js/boot.js中处理的,其中有一段代码如下:

for(var i=0; i < modules.length; i++) {
new_instance[modules[i]] = {};
if (openerp[modules[i]]) {
openerp[modules[i]](new_instance,new_instance[modules[i]]);
}
}

这段就是判断如果模块名称是一个有效的对象,则调用此方法,并传入实例对象作为参数,这里的 new_instance,就会对应到模块定义中方法的形参instance。这个时候你的自定义方法就执行了,如果对系统内核的方法有扩展,这个时候就会生效。

因为这里modules数组都是模块的名称,所以前面我们才说为什么js中的openerp.vnsoft后面的部分要跟模块名称一致。

这里有一个小疑问就是,上面的if条件只是判断openerp[modules[i]]有效,并不是判断对象类型是否为function,正确来讲应该只有function类型才是可以执行的。

原文;http://blog.csdn.net/vnsoft/article/details/17953641
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  openerp python