2016-09-20 12 views
2

私の質問は、Maquette Javascriptフレームワークのコンポーネント間の通信についてです。Maquetteのコンポーネント間の通信

IはApplicationコンポーネントで使用Menu副成分有し想像:Applicationインスタンスは、メニュー項目が(例えば)アプリケーションで表示されるメインコンテンツを交換するためにMenuインスタンスにおいて選択されたときに知りたいです。言い換えれば、子コンポーネントとその親コン​​ポーネントの間で通信する方法が必要です。これはMaquetteでどのように達成できますか?

確かに、アプリケーションインスタンスが所有するコールバックをメニューインスタンスに渡すことができます。これは、アイテムが選択されたときに呼び出されます。しかし、「選択」イベントはメニューコンポーネントの「レンダリング側」の側面に過ぎないので、私はこれをやるのがやめたいので、私のMenu APIに漏れないようにイベントを好むでしょうが、レンダリングの内部にとどまります関数/メソッドを使用します。

"レンダリング側"でのイベントを処理したいと思います。しかし、私はのレンダリング関数からCustomEventを送信し、Applicationのレンダリング関数内にCustomEventハンドラを登録する必要があることを意味します。このユースケースはマケットでサポートされていますか?私のユースケースにはCustomEventの代替手段がありますか?

ありがとうございます!

PS:質問を投稿しました。#71より多くの回答を得るためです。

答えて

1

通常は、アイテムがクリックされたときに呼び出されるコンポーネントにコールバックを渡します。例えば、コールバックmenuItemClicked(menuItem: MenuItem)でメニューを構築することができます。 Imhoこれはメニュー/メニューにアプリケーション固有の知識を漏らしません。メニューの作成者は、ルーティングや変数の変更のようなコールバック内の何かを行うことができます。

イベントシステムも確かに可能です。しかし、DOM階層を使ってイベントをバブリングすることはお勧めしません。 Applicationmenu = createMenu(...)でメニューを作成した後、menu.addEventListener('itemClicked', navigate)などと呼んでいると思います。

+0

なぜDOM階層を使用することをおすすめしませんか?パフォーマンスの問題のため? –

+0

私は、DOM階層を使用すると、不必要に複雑なものになると思います。しかし、それが事実であるかどうか私は不思議です。おそらく、あなたはこれを達成する方法を示すためにjsfiddleまたはcodepenを作ることができますか? –

+0

現在選択されている項目がクリックイベントハンドラの外でプログラムによって変更された場合、イベントがトリガされる必要があるかもしれないことに気付きました。したがって、レンダリング側のみのイベントではありません。私は最終的にあなたの答えが行く方法だと思います。 –

関連する問題