如何调用另一个脚本的类方法
学习参考了演示(体验)版里的脚本写法:P,1、公共脚本GlobalScript,定义了OAClass类,一些常用的函数定义为方法,比如:转换浮点数toFloat(),大写金额toBigSum(),并创建了实例oaClass
2、应用脚本AppScript,定义了AppClass类,也创建了实例appClass
3、每个表单定义对应的脚本xxx_FrmScript,并创建了实例
var _self = this;
var Frm_BX_Class=new Class({
initialize: function () {
debugger
this.cmsAction = o2.Actions.get("x_cms_assemble_control");
this.processAction = o2.Actions.get("x_processplatform_assemble_surface");
this.queryAction = o2.Actions.get("x_query_assemble_surface");
},
CalcActAmount:function(frmData){
var num = parseFloat(frmData.datatable_detail.total.txtItemSum);
if(!isNaN(num)){
var deduct=parseFloat(frmData.txtDeduct);
if(!isNaN(deduct)){
var actSum=num-deduct;
frmData.txtActAmount=actSum.toFixed(2);
}
}
},
ItemSumChange:function(frmData){
var num = parseFloat(frmData.datatable_detail.total.txtItemSum);
frmData.txtTotalAmount=num.toFixed(2);
this.CalcActAmount(frmData);
}
});
this.frm_bx_Class = new Frm_BX_Class();
在表单的queryLoad事件里引用了这些脚本
this.include({
type : "cms", //应用类型。可以为 portalprocesscms。
application : "公共信息", //门户、流程、CMS的名称、别名、id。 默认为当前应用
name : "GlobalScript" //脚本配置的名称、别名或id
});
this.include("AppScript");
this.include("Frm_BX_Script");
想把该语句表单里的脚本里的语句:
var num = parseFloat(frmData.datatable_detail.total.txtItemSum);借助GlobalScript脚本里的toFloat(),请问如何引用oaClass里的toFloat函数
类方法调用就类似this.frm_bx_Class.CalcActAmount 本帖最后由 szjazz 于 2024-8-16 12:35 编辑
不可以
增加一条调试语句:alert(this.oaClass.toFloat(frmData.datatable_detail.total.txtItemSum));
然后打开F12,看到报错:
而如果是直接放在表单控件的脚本里使用,就可以
alert(this.oaClass.toFloat(this.data.datatable_detail.total.txtItemSum));
this.frm_bx_Class.CalcActAmount(this.data);
本帖最后由 szjazz 于 2024-8-17 17:36 编辑
当我将GlobalScript脚本的所有内容复制到Frm_BX_Script脚本文件里,然后在其类结构初始化时,增加创建实例,就可以了
Frm_BX_Script脚本文件里包含了GlobalScript的内容:
var _self = this;
var O2OA_Class=new Class({
initialize: function () {
this.cmsAction = o2.Actions.get("x_cms_assemble_control");
this.processAction = o2.Actions.get("x_processplatform_assemble_surface");
this.queryAction = o2.Actions.get("x_query_assemble_surface");
},
toInt:function(data){
var rData=parseInt(data);
if(isNaN(rData)){
return 0;
}else{
return rData;
}
},
toFloat:function(data){
var rData=parseFloat(data);
if(isNaN(rData)){
return 0;
}else{
return rData;
}
}
});
this.oaClass = new O2OA_Class();
增加创建实例:
var Frm_BX_Class=new Class({
initialize: function () {
this.cmsAction = o2.Actions.get("x_cms_assemble_control");
this.processAction = o2.Actions.get("x_processplatform_assemble_surface");
this.queryAction = o2.Actions.get("x_query_assemble_surface");
this.oaClass=new O2OA_Class();
},
但如果是在Frm_BX_Script脚本里不是复制过来内容,而是采用include语句包含进来的话,又不行了,请问为什么?
是否脚本里包含另一个脚本不能用include语句,或者格式不对?
this.include({
type : "cms", //应用类型。可以为 portalprocesscms。
application : "公共信息", //门户、流程、CMS的名称、别名、id。 默认为当前应用
name : "GlobalScript" //脚本配置的名称、别名或id
});
var _self = this;
var Frm_BX_Class=new Class({
initialize: function () {
this.cmsAction = o2.Actions.get("x_cms_assemble_control");
this.processAction = o2.Actions.get("x_processplatform_assemble_surface");
this.queryAction = o2.Actions.get("x_query_assemble_surface");
this.oaClass=new O2OA_Class();
},
CalcActAmount:function(frmData){
alert(this.oaClass.toFloat(frmData.txtDeduct));
var num = parseFloat(frmData.datatable_detail.total.txtItemSum);
if(!isNaN(num)){
var deduct=parseFloat(frmData.txtDeduct);
if(!isNaN(deduct)){
var actSum=num-deduct;
frmData.txtActAmount=actSum.toFixed(2);
}
}
},
ItemSumChange:function(frmData){
var num = parseFloat(frmData.datatable_detail.total.txtItemSum);
frmData.txtTotalAmount=num.toFixed(2);
this.CalcActAmount(frmData);
}
});
this.frm_bx_Class = new Frm_BX_Class();
ExcelUtils = new Class({
_loadResource : function( callback ){
var uri = "/x_component_Template/framework/xlsx/xlsx.full.js";
var uri2 = "/x_component_Template/framework/xlsx/xlsxUtils.js";
COMMON.AjaxModule.load(uri, function(){
COMMON.AjaxModule.load(uri2, function(){
callback();
}.bind(this))
}.bind(this))
},
_openDownloadDialog: function(url, saveName){
/**
* 通用的打开下载对话框方法,没有测试过具体兼容性
* @param url 下载地址,也可以是一个blob对象,必选
* @param saveName 保存文件名,可选
*/
if( Browser.name !== 'ie' ){
if(typeof url == 'object' && url instanceof Blob){
url = URL.createObjectURL(url); // 创建blob地址
}
var aLink = document.createElement('a');
aLink.href = url;
aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
var event;
if(window.MouseEvent && typeOf( window.MouseEvent ) == "function" ) event = new MouseEvent('click');
else
{
event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
}
aLink.dispatchEvent(event);
}else{
window.navigator.msSaveBlob( url, saveName);
}
},
index2ColName : function( index ){
if (index < 0) {
return null;
}
var num = 65;// A的Unicode码
var colName = "";
do {
if (colName.length > 0)index--;
var remainder = index % 26;
colName =String.fromCharCode(remainder + num) + colName;
index = (index - remainder) / 26;
} while (index > 0);
return colName;
},
export : function(array, fileName){
this._loadResource( function(){
data = xlsxUtils.format2Sheet(array, 0, 0, null);//偏移3行按keyMap顺序转换
var wb = xlsxUtils.format2WB(data, "sheet1", undefined);
var wopts = { bookType: 'xlsx', bookSST: false, type: 'binary' };
var dataInfo = wb.Sheets];
var widthArray = [];
array.each( function( v, i ){
widthArray.push( {wpx: 100} );
// var at = String.fromCharCode(97 + i).toUpperCase();
var at = this.index2ColName(i);
var di = dataInfo;
// di.v = v;
// di.t = "s";
di.s = {//设置副标题样式
font: {
//name: '宋体',
sz: 12,
color: {rgb: "#FFFF0000"},
bold: true,
italic: false,
underline: false
},
alignment: {
horizontal: "center" ,
vertical: "center"
}
};
}.bind(this));
dataInfo['!cols'] = widthArray,
this._openDownloadDialog(xlsxUtils.format2Blob(wb), fileName +".xlsx");
}.bind(this))
},
import : function( file, callback, dateColArray ){
this._loadResource( function(){
var reader = new FileReader();
var workbook, data;
reader.onload = function (e) {
//var data = data.content;
if (!e) {
data = reader.content;
}else {
data = e.target.result;
}
workbook = XLSX.read(data, { type: 'binary' });
//wb.SheetNames是获取Sheets中第一个Sheet的名字
//wb.Sheets获取第一个Sheet的数据
var sheet = workbook.SheetNames;
var jsonList = [];
for (var sheet in workbook.Sheets) {
if (workbook.Sheets.hasOwnProperty(sheet)) {
fromTo = workbook.Sheets['!ref'];
console.log(fromTo);
var json = XLSX.utils.sheet_to_json(workbook.Sheets);
console.log(JSON.stringify(json));
jsonList.push(json);
// break; // 如果只取第一张表,就取消注释这行
}
}
if(callback)callback(jsonList);
};
reader.readAsBinaryString(file);
})
}
});
这是个excel 的类,使用
this.include("ExcelUtils");
var excelUtils = new ExcelUtils();
var array = [];
array.push(["姓名","性别"]);
array.push(["张三","男"]);
excelUtils.export(array,"test-" +(new Date).format("db")); 您的代码需要自己检查看看 我已解决了,是指针不对引起的,类里的引用别的类需要先在外面定义指针,如: var _self=this,然后在里面就要用该变量,不能直接用this
var _self = this;
var Frm_BX_Class=new Class({
initialize: function () {
this.cmsAction = o2.Actions.get("x_cms_assemble_control");
this.processAction = o2.Actions.get("x_processplatform_assemble_surface");
this.queryAction = o2.Actions.get("x_query_assemble_surface");
},
CalcActAmount:function(frmData){
alert(_self.oaClass.toFloat(frmData.txtDeduct));
var num = parseFloat(frmData.datatable_detail.total.txtItemSum);
if(!isNaN(num)){
var deduct=parseFloat(frmData.txtDeduct);
if(!isNaN(deduct)){
var actSum=num-deduct;
frmData.txtActAmount=actSum.toFixed(2);
}
}
},
ItemSumChange:function(frmData){
var num = parseFloat(frmData.datatable_detail.total.txtItemSum);
frmData.txtTotalAmount=num.toFixed(2);
this.CalcActAmount(frmData);
}
});
this.frm_bx_Class = new Frm_BX_Class();
页:
[1]