これは、現在のように、テーマコンポーネントに依存しない一般的な方法で行う必要があると思います。
この手法を使用する別のテーマコンポーネントがあります。
これは私の側からの少なくとも2つであり、さらに増える可能性があります。
これは、現在のように、テーマコンポーネントに依存しない一般的な方法で行う必要があると思います。
この手法を使用する別のテーマコンポーネントがあります。
これは私の側からの少なくとも2つであり、さらに増える可能性があります。
同意します。パッケージにバンドルするのではなく、それぞれが独立したブロックコンポーネントのコレクションを構築しました: https://gitlab.com/manuelkostka/discourse/blocks。
現在、Homepage Blocks コンポーネントを使用してこれらのブロックを専用のホームページに配置できます。Right Sidebar Blocks や Bars で使用することもできます。
最近、カスタムサイドバーレイアウトが必要な Central テーマで実験を行いました。カスタムサイドバー用のブロックフレームワークを簡単に構築し、そこにブロックコンポーネントを配置できました: https://central.kostka.studio (また、Powered-by-discourse コンポーネントを名前で参照するだけでサイドバーに配置することもできます)。
スタンドアロンのブロックコンポーネントは、クライアントのカスタマイズを柔軟かつ保守可能なアプローチで構築するための最も役立つツールです。これをサポートするための一般的な道筋があれば素晴らしいでしょう。
これを再度取り上げたいと思います。コンポーネントの最適な処理方法を考えているのですが、現在、どちらも大きな欠点がある2つの選択肢があります。ブロックをレンダリングするテーマコンポーネントごとにレジストリを作成できますが、それはモジュラーの目的を損なうようなものです。または、プラグインを通じてグローバルに追加しますが、そうするとコンポーネントはそのプラグインがインストールされているかどうかに依存することになります。
そのため、コアにグローバルなブロック登録APIがあれば、非常に役立つと思われます。テーマコンポーネントがブロックレンダリングを呼び出すため、また新しいブロックを登録するために使用できるものです。
ブロックアプローチで作業するのが好きなのは、アプリのレイアウトとコンポーネントのコンテンツの間で関心を分割できるからです。ブロックコンポーネントはコンテンツのレンダリングのみを処理し、その後アプリの別のコンポーネントによってレンダリングされます。ブロックコンポーネントからルートとアウトレットのロジックをすべて削除でき、同じブロックをレイアウト上、さらにはアプリ全体で複数回簡単に再利用できます。
すべてがよりスリムで再利用可能になり、全体的にエレガントなアプローチになると考えています。Discourseでこのパターンをしっかりとサポートできれば素晴らしいでしょう。
デビッド、あるプラグイン/コンポーネントで利用するために、「クロステーマ/プラグイン」コンポーネントを登録するための裁量的なAPIを持つことは実現可能でしょうか?
そうすれば、すべてを登録することを避けつつ、明示的にそれを可能にする柔軟性を提供できます。
この件に関して、汎用的なAPIについては確信が持てません。コンポーネントの使用方法はあまりにも多く、それぞれ引数やロードタイミングに関して異なる期待があるためです。
お客様のユースケースでは、テーマ/プラグイン固有のレジストリで対応可能でしょうか?上記のモックアップ(right-sidebar-blocks用)のようなものでしょうか?
もしそうでない場合は、具体的な例をいくつか提供していただけると、どのようなAPIが必要なのかを正確に把握するのに役立ちます。CDCKが保守するすべてのテーマとプラグインはgjsに移行されており、この問題(right-sidebar-blocksのような特定のケースを除いて)には遭遇していません。
はい、実は、ドラフトPRで書かれたことをより注意深く読み返すと、これが十分良い解決策であると信じるようになります。具体的には:
「このコミットは、右サイドバーブロックコンポーネント専用のリストを導入し、他のテーマ/プラグインが追加のコンポーネントを登録できるようにします。」
これが重要だと思います。あるテーマと互換性があるとしてリモートで登録し、その後「マスター」テーマがリモートで登録された要素を組み込むことができるようにすることは、まさに私が求めていることなので、あなたはすでにこれが可能であることを示していると思います。
素晴らしい!
ごく簡単なケースでは、「マスター」テーマに PluginOutlet を追加するだけで済む場合もあり、他のテーマは renderInOutlet (または connectors/... にファイルを配置する) ことができます。
これも真実です。しかし、あなたのレジストリパターンは本当に気に入っています、とても良いですね。実際、RSB(Barsはすでに同じパラメータシステムを使用しています)との互換性を維持できると良いでしょう。そうすればシステム全体が相互運用可能になります(ただし、2つの初期化子は課題になるかもしれません。あるいは、RSBレイヤーをオフに切り替えられれば、追加の初期化子は必要ないかもしれません。そうすればRSB全体をロードして再利用できますね
)。