2017-03-13 8 views
0

UI5ワークリストテンプレートをダウンロードし、新しい選択を入力して初期選択基準のユーザー入力を受けようとしました。 manifest.jsonでルータの設定を調整し、ユーザーが入力した条件をフィルターオブジェクトとしてワークリストテーブルに渡すコードを追加して、最初のビューとして新しいビュー "Selection"を初期ビューとして設定することができました。下の図のようにworklist.controllerのonInit()にtableのイベントを開始しました。UI5:新しい初期選択基準ビューをワークリストアプリケーションに追加

問題:ユーザーが「選択」ビューから「ワークリスト」にナビゲートしたときに初めてフィルタが適用されるようになりました。その後、選択ビューに戻って選択基準を変更して検索を再度実行する場合、ワークリストには古いデータのみが表示され、新しい基準の影響を受けるように見えます。

worklist.controller.js

答えて

1

これを行うには主に2つの(良い)方法、ルーティング関与の両方があります。

まず、ワークリストルートのpatternMatchedイベントのイベントハンドラ内でコードを移動するだけです(簡単な解決策)。また、ルータのターゲットのdisplayイベントを聞くこともできますが、代わりにpatternMatchedルートイベントを使用することを強くお勧めします。

このイベントは、ルートが一致するたびに(ビューが表示されるたびに)トリガーされます。

onInit: function() { 
    // ... your current code 
    var oRouter = this.getOwnerComponent().getRouter(); 
    oRouter.getRoute("worklist").attachPatternMatched(this.onRouteMatched, this); 
}, 

// ... 

onRouteMatched: function() { 
    var oTable = this.byId("myTable"), //replace the ID accordingly :) 
     aFilters = ...; 
    oTable.getBinding("items").filter(aFilters); 
} 

2番目のオプションは基本的に最初のオプションの拡張です。ユースケースには適していない可能性があります(ユーザーが最初の画面で選択できるフィルタによって異なります)。それでも同じ方法を作る必要があります。しかし、最初の画面の選択を直接取得するのではなく、ルーティングメカニズムを介してデータを渡すことになります。

これは、ユーザーがウィンドウを更新すると、フィルタリングされたビューを取得します(最初の解決策ではなく、リフレッシュ後に常にフィルタリングされていないビューを取得する場合)。 UI5 Routing Walkthroughと同じ基本原理を使用して拡張することができます(つまり、フィルタを文字列として表現する必要があります。つまり、文字列を「選択」ビューの文字列に 'シリアル化'して、文字列をルータに渡します)。navTo呼び出し次に、ワークリストビューの文字列を「デシリアライズ」します)。 walthroughからも次のステップを見てください。

もちろん、ユーザーが無制限または多数のフィルターを選択できる場合、この解決策はうまくいかないでしょう。

+0

私はオプション1が好きです。必要なときに機能しています。ありがとう@ Serban。私はいつもビューイベントでいくつかのオプションを探していました。ルータのイベントを考えたことはありません。 – SriniRao