1.以扩展报销单编辑页面BizAccountBill_Edit_Open.js中initEntryGrid方法为例,说明二开扩展标准产品_public实现:
标准initEntryGrid方法如下,为一个public方法,作用是对分录的一些控件做初始化处理,如业务类别f7、费用类型f7等
扩展时注意:
扩展重写_public实际为覆盖重写,执行时将不会再执行到标准js的该方法,而是直接执行扩展_public方法。所以,在扩展重写的_public方法里,不能仅实现二开业务处理,这会造成标准该方法的处理失效,造成二开和补丁的冲突;也不能直接将标准js该方法的代码复制过来,然后加上二开扩展代码,这样如果后续标准产品有更改,会导致更新补丁后标准更改不生效,造成二开和补丁的冲突。
如没有特殊情况,要采用兼容标准产品的方式扩展,即在重写的_public方法里,先调用标准产品的该方法,然后再做二开处理。类似java继承类重写方法时,通过super调用父类方法一样。举例如下:
(1) 在重写的_public方法调用前,要先缓存标准产品方法,可在扩展js的_public域做缓存super_initEntryGrid: BizAccountBill_Edit_Open.initEntryGrid
缓存后super_ initEntryGrid(该名称可以自定义)即为标准js方法initEntryGrid。
(2) 重写BizAccountBill_Edit_Open.initEntryGrid = function(){},在重写方法里,先调缓存的标准js该方法initEntryGrid即_public.super_initEntryGrid (),再做二开扩展处理。
具体扩展代码如下:
2.扩展基类public方法也是一样,比如扩展bizCollBillBase.js方法中的initCompanyAndCostCenter方法,扩展js代码如下
3.扩展报销单编辑页面BizAccountBill_Edit_Open.js中setInitComponentOpt方法
(1) 在重写的_public方法调用前,要先缓存标准产品方法,可在扩展js的_public域做缓存super_setInitComponentOpt:_self.setInitComponentOpt。
缓存后super_setInitComponentOpt即为标准js方法setInitComponentOpt
(2) 重写BizAccountBill_Edit_Open.setInitComponentOpt = function(type, option, com){},在重写方法里,先调缓存的标准js该方法setInitComponentOpt即_public.super_setInitComponentOpt(type, option, com),再做二开扩展处理。
具体扩展代码如下:
推荐阅读