...
注意 |
---|
在一般情况下最好使用Patch文件修改方式,这样可以降低将来Smartbi升级造成的风险。 |
1. 整个JS文件替换
当需要替换原有的JavaScript文件时,在扩展插件中建立与该JavaScript文件一致的目录结构,在该目录中建立同名的JavaScript文件。Smartbi会优先加载扩展插件中的JavaScript文件。请参照"替换Smartbi文件"。
2. 通过Patch文件修改
在需要修改原有JavaScript的部分功能时,在扩展插件中建立与该JavaScript文件一致的目录结构,建立【原有JavaScript文件名】+【.patch】命名的文件,例如在在扩展插件中建立文件"src/web/vision/js/bof/baseajax/common/LoginView.js.patch",该文件的作用在于声明对原有JavaScript文件的修改。
一般修改的方式会有以下几种:
- 替换原有方法:在Patch文件中重新声明该方法的实现。
- 在原有方法调用前或调用后增加特殊代码:在Patch文件中先保留原有方法实现并重新声明该方法实现,在新的实现中可以调用保留的方法。
- 修改原有JavaScript对象的构造函数:该方式请谨慎使用!
2.1 替换原有方法在Patch文件中重新声明该方法的实现。
代码块 |
---|
|
LoginView.prototype.elemPassword_focus_handler = function(ev) {
alert("Before Password Select");
this.elemPassword.select();
};
|
锚 |
---|
| _在原有方法调用前或调用后增加特殊代码 |
---|
| _在原有方法调用前或调用后增加特殊代码 |
---|
|
2.2 在原有方法调用前或调用后增加特殊代码在Patch文件中先保留原有方法实现并重新声明该方法实现,在新的实现中可以调用保留的方法。
代码块 |
---|
|
//保存原有方法实现到临时名称中
LoginView.prototype.__elemLogin_click_handler = LoginView.prototype.elemLogin_click_handler;
LoginView.prototype.elemLogin_click_handler = function(ev) {
alert('Before login');
// 调用保存的原有方法实现
this.__elemLogin_click_handler(ev);
alert('After login');
}
|
锚 |
---|
| _修改原有JavaScript对象的构造函数(该方式请谨慎使用!) |
---|
| _修改原有JavaScript对象的构造函数(该方式请谨慎使用!) |
---|
|
2.3 修改原有JavaScript对象的构造函数(该方式请谨慎使用!) 代码块 |
---|
|
// 声明一个新的JavaScript类的构造函数
var LoginViewPatch = function(container) {
alert('Before constructor');
// 调用原有的构造函数
LoginViewPatch.superclass.constructor.call(this, container);
alert('After constructor');
}
// 声明新的JavaScript类是对原来的类打补丁
lang.patch(LoginViewPatch, LoginView);
|
3. 示例工程源码
Sample7.rar