我想在SAPUI5中创建一个新库并使用declare
jQuery.sap.declare("app.util.Test", true);
var Test = {
myFn: function(){return 'foo'}
}
但是当我想使用它时,却找不到它
sap.ui.define([
"sap/ui/core/mvc/Controller",
"app/util/Test"
], function(Controller, Test) {
"use strict";
return Controller.extend("app.controller.MyTest", {
onInit: function() {
// Test undefined
var baa = Test.myFn();
}
});
我该如何解决这个问题?
答案 0 :(得分:1)
这取决于您编写该代码的位置。更具体地说,是否在控制器的sap.ui.define
调用之前执行,或者它确实位于正确的路径中。
假设您的 root 名称空间为app
,您的文件夹结构应如下所示:
rootFolder
|-controller
|---MyTest.controller.js
|-util
|---Test.js
此外,您没有对Test
对象执行任何操作。 jQuery.sap.define
只是创建一个全局对象并将其注册到UI5注册表。它不会将您的Test
对象与此全局对象相关联。所以你应该这样做:
jQuery.sap.declare("app.util.Test", true);
app.util.Test = {
myFn: function(){return 'foo'}
}
通常情况下,您不应使用jQuery.sap.declare,而只需将sap.ui.define用于实用程序模块(以避免使用全局变量)。如果您的文件夹结构正确,则不必指定模块名称(因为框架会从文件的位置推断出它)。
sap.ui.define([], function () {
return {
myFn: function(){return 'foo'}
};
});
只是想指出你不定义一个库,而只是一个实用程序模块。您可以查看有关创建新UI5库的documentation(通常用于对自定义控件,元素等进行分组)。