Sapui5 调用一个控制器';另一个控制器中的方法?

Sapui5 调用一个控制器';另一个控制器中的方法?,sapui5,Sapui5,我完全搞不懂你们所有人都在使用模块eventbus 我将尝试用更简单的话来重新表述我的问题,因为我对这个框架还不熟悉,我喜欢用简单的方式来理解它。因此,以下是我试图实现的目标: 我有一个与问卷视图绑定的问卷控制器。现在,我需要使用xsjs从后端获取一些数据,并绑定到此视图。我需要在页面呈现之前获取这些数据,因此我在呈现之前使用ajax调用,在ajax调用的完整属性中,我需要执行一些操作。由于我在complete属性中的函数太长,我考虑创建一个单独的控制器,然后定义我的方法,在这里进行ajax调用

我完全搞不懂你们所有人都在使用模块eventbus

我将尝试用更简单的话来重新表述我的问题,因为我对这个框架还不熟悉,我喜欢用简单的方式来理解它。因此,以下是我试图实现的目标:

我有一个与问卷视图绑定的问卷控制器。现在,我需要使用xsjs从后端获取一些数据,并绑定到此视图。我需要在页面呈现之前获取这些数据,因此我在呈现之前使用ajax调用,在ajax调用的完整属性中,我需要执行一些操作。由于我在complete属性中的函数太长,我考虑创建一个单独的控制器,然后定义我的方法,在这里进行ajax调用和必要的验证。这个新的控制器只保存这个方法定义,因此它不绑定到任何视图

现在,我应该如何在问卷控制器中调用此控制器,并使用其方法进行ajax调用,并在控制器方法中执行验证

sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
"sap/m/MessageBox"], function(Controller, JSONModel, MessageBox) {


var questionnaireResponseId;
var password;
var backendJSON;

Controller.extend("OnlineQuestionnaire.controller.Questionnaire", {

    onInit: function() {
        jQuery.sap.require("jquery.sap.storage");

    },
    onBeforeRendering: function() {
        questionnaireResponseId = jQuery.sap.storage.get("QuestionnaireResponseId");
        password = jQuery.sap.storage.get("Password");
       backendJSON = loadStack(questionnaireResponseId);  //This is not correct way to call 
}
此方法在QuestionStack.controller.js中定义

loadStack(questionnaireResponseId) {
jQuery.ajax({
                url: "",
                method: "GET",
                dataType: "json",
                complete: this.onSuccess,
                error: this.onErrorCall
            });


return output;
}

使用Questionnare.controller.js扩展QuestionStack.controller.js:

sap.ui.define([
".." // path to your QuestionStack.controller.js, e.g. "myapp/controller/QuestionStack"
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
"sap/m/MessageBox"], function(Controller, JSONModel, MessageBox) {


var questionnaireResponseId;
var password;
var backendJSON;

QuestionStack.extend("OnlineQuestionnaire.controller.Questionnaire", { // extend
    ..
}

使用此.loadStack(..)调用该方法

如果另一个控制器没有绑定到任何视图,那么为什么它是一个控制器?它不只是一个可重用的模块吗?在我的调查问卷中,它是一个可以保存额外代码并降低代码复杂性的模块。controller.jsMethod onBeforeRendering不是加载数据的地方。您应该使用路由机制,并在特定路由匹配时执行数据加载。这样,您将加载完整的控制器。如果项目达到某个状态,这可能会导致性能问题!请不要这样做。我将提供另一种方法。请参阅loki的评论:“在我的问卷中,这是一种保存额外代码并降低代码复杂性的模块。controller.js”。这就说明了一切。扩展正是正确的。但是出于兴趣,您的项目需要到达哪个状态,扩展会导致性能问题?