EmberコンポーネントとDiscourseウィジェットの違いはどれくらいありますか?

プラグインでモーダルダイアログを実装しようとしています。Ember コンポーネントと Discourse ウィジェットの両方がこれを実現できることは、メタサイトでの検索で分かりました。Ember コンポーネントも Discourse ウィジェットも、プラグインアウトレットにアタッチし、HTML をレンダリングし、イベントを処理できます。

上記のウィジェットに関するトピックは 1 つしか見つかりませんでしたが、そこでは Discourse ウィジェットの方が高速にレンダリングできると書かれているだけです。しかし、Discourse コアや多くの他のプラグインでは、Ember コンポーネントと Discourse ウィジェットの両方が使用されています。例えば:

違いについてご存知の方がいれば教えていただけますか?
よろしくお願いいたします。

「いいね!」 1

コンポーネントは Discourse のほぼすべての場所で広く使用されています。ウィジェットが特に有用なのは、トピックの投稿ストリームや複数のメニューを含むヘッダーなど、アクセス数の非常に多い要素においてです。

プラグインやテーマでは、既存のウィジェットに追加したり変更を加えたりするために、ウィジェットがよく使われます。

例えば、discourse-calendar プラグインにある次のウィジェットをご覧ください:

これはトピックの最初の投稿に表示されるボタンです。パフォーマンス上の理由から投稿自体がウィジェットとしてレンダリングされるため、このボタンもウィジェットである必要があります。

ただし、そのファイルの 11 行目から 17 行目を見ると、JavaScript 内で hbs ヘルパーを介して Handlebars テンプレートが定義されており、そのテンプレート内には {{i18n ...}} のようにレンダリングされるコンポーネントが含まれていることがわかります。

したがって、一般的にはコンポーネントを使用できます。ただし、UI 要素がすでにウィジェットとしてレンダリングされている場合は、ウィジェットを使用してください。また、状況が許せば、ウィジェット内で既存のコンポーネントを活用することもできます。

「いいね!」 7

ご回答ありがとうございます!まさに知りたかったことです。

「いいね!」 2

コンポーネントとウィジェットを選択する際の経験則:

  • 大量に表示する場合は、パフォーマンスの観点からウィジェットを選ぶのが良いでしょう。
  • ウィジェットはコンポーネントよりも制限があり、複雑な UI を構築する際に完璧に動作させるには、より多くの知識が必要です。

つまり、パフォーマンスが問題にならない場合は、可能な限りコンポーネントを使用します。パフォーマンスが問題になる場合や、やむを得ない場合(例:プラグイン API を使って他のウィジェットを装飾する)には、ウィジェットを使用するでしょう。

「いいね!」 9