web-dev-qa-db-ja.com

SAPUI5-ビューが毎回表示されたら一度呼び出すメソッドはどれですか?

ビューが毎回表示される前にいくつかのロジックを実行したいと思います。ビューが作成されて初めて表示されるときに一度しか呼び出されないため、beforeレンダリングメソッドを使用することはできません.Plsヘルプ。

9
Papu

コントロールのbeforeレンダリングメソッドが一度だけ呼び出されると思いますか?サンプルコードはありますか?

Jsbin( http://jsbin.com/qikokayo/1/edit?html,output )で簡単に汚い例を作成しましたので、見てください。これは、onInitが1回呼び出されるが、onBeforeRenderingが毎回呼び出されることを明確に示しています...

このスニペットも参照してください OpenUI5 SDKから 説明:

ライフサイクルフック

onInit()-ビューがインスタンス化され、そのコントロール(利用可能な場合)が既に作成されているときに呼び出されます。表示される前にビューを変更して、イベントハンドラーをバインドし、他の1回限りの初期化を行うために使用できます。

onExit()-ビューが破棄されたときに呼び出されます。これを使用してリソースを解放し、アクティビティを完成させます。

onAfterRendering()-ビューがレンダリングされたときに呼び出されます(したがって、そのHTMLはドキュメントの一部です)。 HTMLのレンダリング後の操作はここで行うことができます。このフックは、レンダリング後にSAPUI5コントロールが取得するフックと同じです。

onBeforeRendering()-コントローラのビューが再レンダリングされる前に呼び出されます。最初のレンダリングの前にのみフックが呼び出される場合は、onInit()を使用します。

ビューのないコントローラーの場合、ライフサイクルフックは呼び出されません。

11
Jason Scott

Componentおよび関連するroutingを含む最新のSAPUI5 fioriスタイルのアプリケーションの場合、ビューに指定されたルートパターンと一致する場合に呼び出されるメソッドを常にビューにアタッチできます。このルートは、歴史的にはmetadataクラスのComponentで提供されていましたが、v1.30以降、manifest.jsonファイルで宣言されています。

ビューのonInitメソッドでは、次のことができます。

onInit: function() {
    this._oRouter = this.getOwnerComponent().getRouter();
    this._oRouter.getRoute("yourRouteForThisView").attachPatternMatched(this._onObjectMatched, this);
}

したがって、ビューにアクセスするたびに呼び出される_onObjectMatchedメソッドがあります。ここに、ビューがレンダリングされる前に実行する必要があるすべてのコードをここに配置できます。

_onObjectMatched: function(oEvent) {
    var oArgs = oEvent.getParameter("arguments");
    //If any values were passed in the URL then those will be available in oArgs
    //Do other stuff here
}

これをランディングページに使用することもできます。最初のビューは通常、manifestのルートパターンとして空の文字列""を持っています。

6
Kumar

別のパターンは次のとおりです(Mattttのおかげで)

onInit : function () {

    //...other code

    var router = this.getOwnerComponent().getRouter();
    var target = router.getTarget("<your route target name>");
    target.attachDisplay(this.onDisplay, this);
},

/** Fires evey time view is displayed.
 *
 * @param oEvent
 */
onDisplay: function(oEvent) {

    console.log('refreshData')
    this._refreshData()
},      

OnDisplay関数は、ビューが表示されるたびに発生します。私自身の小さな経験では、レンダリング中のイベントは最初に想定するよりも頻繁に発生します。

4

onBeforeShowの問題を修正しました。努力してくれたjasonに感謝します。

3
Papu