ビューが毎回表示される前にいくつかのロジックを実行したいと思います。ビューが作成されて初めて表示されるときに一度しか呼び出されないため、beforeレンダリングメソッドを使用することはできません.Plsヘルプ。
コントロールのbeforeレンダリングメソッドが一度だけ呼び出されると思いますか?サンプルコードはありますか?
Jsbin( http://jsbin.com/qikokayo/1/edit?html,output )で簡単に汚い例を作成しましたので、見てください。これは、onInit
が1回呼び出されるが、onBeforeRendering
が毎回呼び出されることを明確に示しています...
このスニペットも参照してください OpenUI5 SDKから 説明:
ライフサイクルフック
onInit()
-ビューがインスタンス化され、そのコントロール(利用可能な場合)が既に作成されているときに呼び出されます。表示される前にビューを変更して、イベントハンドラーをバインドし、他の1回限りの初期化を行うために使用できます。
onExit()
-ビューが破棄されたときに呼び出されます。これを使用してリソースを解放し、アクティビティを完成させます。
onAfterRendering()
-ビューがレンダリングされたときに呼び出されます(したがって、そのHTMLはドキュメントの一部です)。 HTMLのレンダリング後の操作はここで行うことができます。このフックは、レンダリング後にSAPUI5コントロールが取得するフックと同じです。
onBeforeRendering()
-コントローラのビューが再レンダリングされる前に呼び出されます。最初のレンダリングの前にのみフックが呼び出される場合は、onInit()を使用します。ビューのないコントローラーの場合、ライフサイクルフックは呼び出されません。
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
のルートパターンとして空の文字列""
を持っています。
別のパターンは次のとおりです(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関数は、ビューが表示されるたびに発生します。私自身の小さな経験では、レンダリング中のイベントは最初に想定するよりも頻繁に発生します。
onBeforeShow
の問題を修正しました。努力してくれたjasonに感謝します。