二種類のマクロコンポーネントがあります。インライン[57]とレギュラー(標準)です。デフォルトでは、レギュラーマクロスが想定されています。インラインマクロスを指定するのに、コンポーネントコマンド中でinline=”true”を指定しなければなりません。
インラインマクロはinline-expansionのように作動します。インラインマクロが指定されると、ZKはマクロコンポーネントを作成しません。その代わり、マクロURIの中で定義されたコンポーネントをインライン拡張します。つまり、インラインマクロのコンテンツを直接目標ページに入力するのと同様です。
use.zul: (target page)
<?component name="username" inline="true" macroURI="username.zul"?> <grid> <rows> <username id="ua" name="John"/> </rows> </grid>
username.zul: (macro definition)
<row> Username <textbox id="${arg.id}" value="${arg.name}"/> </row>
Equivalent page:
<grid> <rows> <row> Username <textbox id="ua" value="John"/> </row> </rows> </grid>
id を含む全てのプロパティがインラインマクロに渡されます。
一方で、ZKは(マクロコンポーネントと呼ばれる)本当のコンポーネントを作成しレギュラーマクロを表します。つまり、マクロの中で定義されたコンポーネントの親としてマクロコンポーネントは作成されます。
複雑なページではレギュラーより、インラインマクロを使うほうが簡単です。例えば、前の例では、rowsはマクロコンポーネントではなくて、列のみを受け取るので、レギュラーコンポーネントを使うことはできません。インラインマクロでは、すべてのコンポーネントが同じIDスペースにあるため、アクセスするのはより簡単ですが、名前の衝突を避けなければなりません。
一方、レギュラーマクロスでは、APIを使用することができます。どのレギュラーマクロコンポーネントもIDスペースの所有者です。ですから、名前の衝突はありません。