2017-11-30 3 views
-1

SAPUI5のEvent BusRouterの違いは何ですか? ルータやイベントバスを使用しなければならないシナリオを手伝ってください。SAPUI5のrouterとeventBusの違い

+0

この混乱の原因はわかりません。ドキュメンテーションに何が欠けていたのですか?あなたはその違いを理解しようとしましたか? – boghyon

+0

この回答は、* EventBus *をよりよく理解するのに役立ちます。https://stackoverflow.com/a/46186706/5846045実際には、* EventBus *はナビゲートを実行する方法を知っていましたが(* https://stackoverflow.com/q/283​​61608/5846045)、* Router *はそれを廃止しました。 – boghyon

答えて

1

ショッピングのシナリオであなたを説明しようとします。

「MyshopWebsite」ショッピングサイトを参照しているとします。それがSAPのUI5ライブラリを使用して開発されていると思いましょう。

主要Functionlity:

  1. 無限の最初のホーム・ページ(ロード、たとえば、n個の項目にスクロールして、10の以上の項目とすぐに底を打っよう
  2. クリックして製品にし、あなたが見ることができます。あなたの選択に基づいて、サイドパネルに示されるその別のページで詳細。
  3. 提案。

SCEN ario 1:今、ホームページでスクロールしています。あなたが底を打つとすぐに、新しい製品がロードされます。注:

  1. ここでは、同じページでさらに情報を表示する必要があります。ブラウザのハッシュをナビゲートまたは変更することはありません。

  2. ルータは、現在のページとは異なるページに移動し、必要なデータを渡すために使用されます。だからここでは使わない。私は同じページにいて、ブラウザーのURLとその現在のハッシュを変更したくありません。

  3. したがって、ページの最後に達した後でさらに商品を表示するにはどうすればよいですか?ページのブラウザの終わり(JSを介して)を確認し、より多くを読み込みます。多くの方法があります。

だから、世界に伝えることが仕事であるメッセンジャーXがいるとしましょう。彼はページの終わりに達しました。我々はより多くの製品が必要です!

そして、私たちのメッセンジャーを聞いているリスナーLがいます。彼は彼に聞くと、彼に新しいデータを送ります。

したがって、専門用語に変換してください。

function initMethod() { 
    var eventBus = sap.ui.getCore().getEventBus(); 
    eventBus.subscribe("homePage", "reachedEndOfPage", handleEndOfPage, this); // Listener L 
} 

function reachedEndOfPage() { 
    var eventBus = sap.ui.getCore().getEventBus(); 
    eventBus.publish("homePage", "reachedEndOfPage"); // Messenger X 

} 

function handleEndOfPage() { 
    // Ok.. lets send more data 
} 

シナリオ2:製品をクリックしました。シンプルで、彼を新しいページに移動させてください。ページの情報を表示します。ブックマークできるようにBroswer URLとハッシュを変更します。

何を選択するか:ルーター。

SAPUI5ルータはCrossroads JSをベースにしています。彼らは十字路と言う:

これは、強力で柔軟なルーティングシステムです。適切に使用すると、オブジェクトの結合を解除し、ナビゲーションパスとサーバー要求を抽象化することでコードの複雑さを軽減できます。

ルーターはナビゲーションに使用されます。

ただし、ここでイベントバスを使用してナビゲーションできます。どうやって ?プロダクト、パブリッシュイベント(「Product Clicked」)のプレスイベントで、「Product Clicked」イベントを購読するハンドラを作成し、App.navToまたはRouter.navToを呼び出します。

したがって、イベントバスは、手動で起動できるすべての種類のイベントのリスナーを作成します。

ここで、ルータはナビゲーションに使用され、ブラウザーのハッシュ変更のみを聴いています。

シナリオ3:今、私はそれが明確になることを望みます。私はナビゲートしていませんが、ユーザーが製品をクリックするたびに耳を傾け、反応したいと思っています。

私は、「クリック」するメッセンジャーを作成し、誰かがクリックすると叫ぶ(公開する)人物を作成します。そして提案リスナー、つまりリスナー「Suggest」は、私たちのメッセンジャーによって公開されたイベントを聞いたり、反応したりします:「クリック」。

私はそれがあなたを助けてくれることを願っています。あなたがまだ混乱している場合は教えてください。必要に応じてさらに情報を追加しようとします。

0

ルータ異なるターゲット間でをナビゲートできます。 1つのターゲットは1つまたは2つのビューで構成されます。

ビューAのリストとビューBのリスト項目の詳細を含むフォームがあるとします。ビューAのリスト項目を押すと、ルータを使用して詳細ビューBにナビゲートできます。

イベントバスを異なるアクティブコントローラ間で通信できます。

マスターと詳細表示の分割アプリがあるとします。マスタービューでイベントを発生させ、詳細ビューでこれらのイベントを聞くことができます(逆も同様)

+0

基本的にEventBusを使って何かと通信することができます。コンポーネントごとに1つのEventBus +追加のグローバルEventBusがあるので、コンポーネント/アプリケーション間で通信することさえできます。そして、イベントエミッタを知らなくても(EventListenerパターンよりも大きな利点があります) – cschuff

関連する問題