Model view controller SAPUI5创建不带视图的控制器

Model view controller SAPUI5创建不带视图的控制器,model-view-controller,controller,sapui5,Model View Controller,Controller,Sapui5,我正在使用SAPUI5,Web IDE开发一个应用程序。是否可以在没有视图的情况下创建控制器?因为我需要一个自定义控制器来处理应用程序的逻辑,然后再将其提交给服务器 我尝试创建一个没有视图的控制器。但它给了我错误的回答 下面是我的示例代码 /*global location*/ sap.ui.define([ "product/controller/BaseController", "sap/ui/model/json/JSONModel", "sap/ui/core/r

我正在使用SAPUI5,Web IDE开发一个应用程序。是否可以在没有视图的情况下创建控制器?因为我需要一个自定义控制器来处理应用程序的逻辑,然后再将其提交给服务器

我尝试创建一个没有视图的控制器。但它给了我错误的回答

下面是我的示例代码

/*global location*/
sap.ui.define([
    "product/controller/BaseController",
    "sap/ui/model/json/JSONModel",
    "sap/ui/core/routing/History",
    "product/model/formatter"
], function(BaseController, JSONModel, History, formatter) {

        onInit: function() {
            sap.ui.getCore().getEventBus().subscribe(
                "SomeChannel",
                "SomeEvent",
                this.someFunctionOfTheFirstController,
                this
            );
        }

    processLogic: function (sChannelId, sEventId, sData) {
        console.log(
            "Function of the first controller " + sData
        );
    }
});

任何解决方案我如何修复它并创建一个没有视图的控制器和方法。

我想您必须返回控制器对象本身。您正在导入BaseController,因此您的控制器可能如下所示:

sap.ui.define([
    "product/controller/BaseController",
    "sap/ui/model/json/JSONModel",
    "sap/ui/core/routing/History",
    "product/model/formatter"
], function(BaseController, JSONModel, History, formatter) {

    return BaseController.extend("product.controller.MyController", {
        onInit: function() {
            sap.ui.getCore().getEventBus().subscribe(
                "SomeChannel",
                "SomeEvent",
                this.someFunctionOfTheFirstController,
                this
            );
        },

        processLogic: function (sChannelId, sEventId, sData) {
            console.log("Function of the first controller " + sData);
        }
   });
});
之后,您可以通过调用以下命令加载控制器:

const myController = sap.ui.controller("product.controller.MyController");

我猜您必须返回控制器对象本身。您正在导入BaseController,因此您的控制器可能如下所示:

sap.ui.define([
    "product/controller/BaseController",
    "sap/ui/model/json/JSONModel",
    "sap/ui/core/routing/History",
    "product/model/formatter"
], function(BaseController, JSONModel, History, formatter) {

    return BaseController.extend("product.controller.MyController", {
        onInit: function() {
            sap.ui.getCore().getEventBus().subscribe(
                "SomeChannel",
                "SomeEvent",
                this.someFunctionOfTheFirstController,
                this
            );
        },

        processLogic: function (sChannelId, sEventId, sData) {
            console.log("Function of the first controller " + sData);
        }
   });
});
之后,您可以通过调用以下命令加载控制器:

const myController = sap.ui.controller("product.controller.MyController");

为什么这需要一个控制器呢。您的
define
可以返回函数或对象,不需要扩展控制器。返回一个函数,您可以使用该函数订阅事件总线并在其他控制器中使用它?在我将新控制器包含在“定义”中后,它返回错误,并且我无法导航到包含新控制器的页面。但为什么需要控制器。您的
define
可以返回函数或对象,不需要扩展控制器。返回一个可用于订阅事件总线并在其他控制器中使用的函数?在“定义”中包含我的新控制器后,返回错误,我无法导航到包含新控制器的页面