处理sapui5客户端应用。我尝试使用位于控制器js文件中的另一个函数中的一个公共js文件中的函数,但是我收到错误"不是函数"。
控制器文件 - >控制器/ controller.js
sap.ui.define([
"path/js/error"
], function(JSONModel) {
"use strict";
onInit: function() {
var type="servidor";
var oModelServidores = new sap.ui.model.json.JSONModel();
oDataModel.read('/ServersSet', {
async: false,
success: function(data) {
//do something
},
error: function(type, err) {
errHandler(type,err); //here I'm getting the error
}
});
}
});
js文件在哪里是我想在控制器中使用的函数 - > JS / error.js
function errHandler(type, err){
var ErrorResponse = err.responseText;
var ErrorResponseBody = JSON.parse(err.responseText);
var msgError = ErrorResponseBody.error.message.value;
switch(type) {
case 'servidor':
console.log('Ups! se ha producido un error a nivel de servidor: ' + msgError);
break;
default:
console.log('Se ha producido un error inesperado');
}
}
知道为什么会遇到这个问题?
答案 0 :(得分:0)
define
是一个AMD约定,看起来你正在处理AMD模块。您应该了解AMD的工作原理。 require.js是AMD的一个实现。
代码
sap.ui.define(["path/js/error"], function (JSONModel) {...}
表示:"在path/js/error
加载文件,并将其返回的内容填充到变量JSONModel
。
您编写代码的方式意味着JSONModel
是包含函数errHandler
的引用(如果这是由path/js/error
定义的)或具有包含errHandler
的属性。
所以,你的代码看起来应该是这样的:
<强>控制器/ controller.js 强>
sap.ui.define([
"path/js/error"
], function (JSONModel) { // This is where the module defined by path/js/error is stored
"use strict";
onInit: function () {
var type = "servidor";
var oModelServidores = new sap.ui.model.json.JSONModel();
oDataModel.read('/ServersSet', {
async: false,
success: function (data) {
//do something
},
error: function (type, err) {
// Use the errHandler function of the dependency
JSONModel(type, err);
// or if errHandler is attached to an object that is returned
JSONModel.errHandler(type, err)
}
});
}
});
<强>路径/ JS / error.js 强>
define([], function () {
return function errHandler(type, err) {
var ErrorResponse = err.responseText;
var ErrorResponseBody = JSON.parse(err.responseText);
var msgError = ErrorResponseBody.error.message.value;
switch (type) {
case 'servidor':
console.log('Ups! se ha producido un error a nivel de servidor: ' + msgError);
break;
default:
console.log('Se ha producido un error inesperado');
}
}
});
答案 1 :(得分:0)
你应该在开头导入js文件并给它一个句柄。 您的代码应如下所示:
sap.ui.define([
"path/js/error",
"sap/ui/model/json/JSONModel"
], function (Error, JSONModel) {...
...
var oModelServidores = new JSONModel(); <-- note
...
Error.errHandler(type, err) <- you could call the handle to the js file something else
确保js文件位于您指定的相对路径