私はモジュール、eventbusを使用しているすべての流行語と全く混同しています。別のコントローラで1つのコントローラのメソッドを呼び出す?
私はこのフレームワークが初めてで、簡単な方法で理解したいので、より簡単な言葉で質問を言い換えようとします。だからここに私が達成しようとしているもの:
私はアンケートビューにバインドされているアンケートコントローラを持っています。今私は私のxsjsでバックエンドからいくつかのデータを取得し、このビューにバインドする必要があります。 Beforeレンダリングで私のajax呼び出しを使用しているので、私のajax呼び出しの完全なプロパティで、いくつかのvaildationsを実行する必要があるように、ページのレンダリング前にこのデータをフェッチする必要があります。完全なプロパティでの私の関数が長すぎるので、私は別のコントローラを作成し、次にajax呼び出しと必要な検証を行うメソッドを定義することを考えていました。この新しいコントローラはこのメソッド定義を保持しているだけなので、どのビューにもバインドされません。
Now Questionnaireコントローラでこのコントローラを呼び出す必要があります。コントローラメソッドで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
}
この方法では、Questionnare.controller.jsであなたのQuestionStack.controller.jsを拡張QuestionStack.controller.js
loadStack(questionnaireResponseId) {
jQuery.ajax({
url: "",
method: "GET",
dataType: "json",
complete: this.onSuccess,
error: this.onErrorCall
});
return output;
}
を他のコントローラは、任意のビューにバインドされていない場合は、なぜそれでありますコントローラ?それは単なる再利用可能なモジュールではありませんか? – amiramw
Questionnaire.controller.jsで余分なコードを保持してコードの複雑さを減らすためのモジュールの種類 – loki
メソッドonBeforeRenderingはデータをロードする場所ではありません。特定のルートが一致する場合は、ルーティングメカニズムを使用してデータをロードする必要があります。 – matbtt