私はタペストリー5のWebフレームワークを学んでいますが、それについての原則1を理解していません:「静的構造、動的動作」、それはどういう意味ですか?
コンポーネントをコンポーネントに追加しない場合、動的ページを作成するにはどうすればよいですか?
誰かが私を助けることができますか?前もって感謝します
これは、実行時にコンポーネントを効果的に選択または交換できないことを意味します。
たとえば、ユーザーが画面上にコンポーネントを好きなように配置できるポータルソリューションを構築したい場合、コンポーネントは静的な構造を持っているため、Tapestryはそれを行う効果的な方法を提供しません。つまり、何を入れるかを定義する必要があります。テンプレートファイルでコンパイル時にそれらを。
または、管理者専用のメニューがある場合は、Menu
コンポーネントを派生コンポーネントに置き換えるだけでもかまいませんが、テンプレートでステートメントAdminMenu
を使用if
するか、ブロックを使用してレイアウトにさまざまなメニューを挿入する必要があります。成分。
この制限に関連するアンチパターンがあります。神またはユーバーコンポーネントは、次のように、使用可能なすべてのコンポーネントを含む巨大なテンプレートファイルを効果的に作成することで、この問題を解決しようとします。
<t:if t:test="displayComponentA">
<span t:type="ComponentA" ... />
</t:if>
<t:if t:test="displayComponentB">
<span t:type="ComponentB" ... />
</t:if>
...
ただし、Tapestryは、表示されていないコンポーネントを含むコンポーネントツリー全体をアセンブルして、ページのレンダリングを行うため、これはひどく効果がありません。
静的構造は、動的コンテンツを出力できないことや、コンポーネントをコンポーネントに追加できないことを意味するものではありません。実行時にコンポーネントを別のコンポーネントに追加することはできません。他のコンポーネントを使用してページまたはコンポーネント構造を定義できますが、これはすべてテンプレートで定義され、ページがレンダリングされる前に定義されます。ページがレンダリングされている間は定義されません。コンポーネントは、それ自体をレンダリングしないこと、テンプレートの一部をレンダリングすること(IfおよびUnlessコンポーネント)などを選択できます。
Tapestryの静的構造によって引き起こされるいくつかの実際的な状況の1つは、コンポーネントCがその内部の同じコンポーネントの別のインスタンスを使用できないことです。
Tapestryは、テンプレートを使用して静的コンテンツを定義します。これらのテンプレートは通常、フレームワークによって動的にいくつかのコードに置き換えられるプレースホルダー変数を持つhtmlページです。テンプレートを使用すると、変更されていないものと変更されていないものを分離できます。通常、構造は動作よりも変化しにくいです。コンポーネントの一部の要素を動的に変更する場合でも、データで動的に入力されるテンプレートによってそれ自体が定義されるコンポーネントを使用します。この動的データは、他のコンポーネントなどを挿入する可能性があります。