SAPUI5创建库

SAPUI5创建库,sapui5,Sapui5,我想在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 stric

我想在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();
        }
    });

如何修复此问题?

这取决于您在哪里编写的代码。更具体地说,是在控制器的sap.ui.define调用之前执行,还是确实位于正确的路径中

假设根命名空间为app,则文件夹结构应如下所示:

rootFolder
|-controller
|---MyTest.controller.js
|-util
|---Test.js
此外,您没有对测试对象执行任何操作。定义只需创建一个全局对象并将其注册到UI5注册表中。它不会将测试对象与此全局对象关联。所以你应该:

jQuery.sap.declare("app.util.Test", true);

app.util.Test = {
    myFn: function(){return 'foo'}
}
通常,您不应该使用,而应该简单地将其用于实用程序模块,以避免全局变量的使用。如果文件夹结构正确,则不必指定模块名,因为框架将从文件位置推断模块名

sap.ui.define([], function () {
    return {
        myFn: function(){return 'foo'}
    };
});
我只是想指出,您并不是在定义一个库,而只是一个实用程序模块。您可以查看关于创建新UI5库的信息,该库通常用于对自定义控件、元素等进行分组