OE模块中js方法初始化


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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值