CSS の再帰

Java™ オブジェクトを宣言値として指定するとします。単純な規則により、 スタイル・シートで再帰処理することができます。つまり、同じスタイル・シートを使用するが、現在のデータ・モデルに関連していない新規 Java オブジェクトを定義することができます。

@# 構成

以下のコード例に示すように、値の前に @# を付けて、必要に応じて新規 Bean を作成します。
宣言での Bean の作成
form { 
      date : "@#dateBean" ; 
      title : "CSS rules" ;
}
Subobject#dateBean { 
      class : ’java.util.Date’ ; 
      time  : ’23849291’ ;
} 
@# 演算子は、現在のデータ・モデルを拡張して、ダミーのモデル・オブジェクトを、現在のオブジェクトの子として追加します。ダミーのオブジェクト ID はストリングの残りであり、@# 演算子以降の部分です。ダミーのオブジェクトの種類は Subobject です。ダミー・オブジェクトは、自身の親から CSS クラスと属性を継承します。
CSS エンジンは、ダミー・オブジェクトについて検出した宣言に従って、新規サブオブジェクトを作成およびカスタマイズします。 これは具体的には、サブオブジェクトの Java クラスが class プロパティーの値によって決定されることを意味します。 新たに作成したサブオブジェクトが、@# 式の値になります。サブオブジェクトの宣言では、@ 演算子を介した属性参照が親オブジェクトの属性を参照します。
サブオブジェクトが完了すると、前のモデルは、正常な処理が再開されるように復元されます。
コード例 宣言での Bean の作成 では、 time プロパティーを 23849291 に設定して、 java.util.Date オブジェクトが作成されています。 この新規オブジェクトは、form オブジェクトの date プロパティーに割り当てられています。

@= 構成および @+ 構成

@#ID 演算子には以下の 2 つの細分があります。
  • '@=ID'
    @#ID の代わりに @=ID を使用することで、インスタンスを共有します。 最初に宣言が解釈されると、オブジェクトは、@# 演算子と同様に作成されます。しかし、これ以降、同じ値にアクセスしても、ルールが適用されずに最初に作成された同じインスタンスが @=ID から返されます。@= を使用して作成されたすべてのインスタンスは、 新しいスタイル・シートが適用されると消去されることに留意してください。
  • '@+ID'
    @#ID の代わりに @+ID を使用することで、不要な作成を回避します。 基本的に、@+ID は、オブジェクトが存在しないか、 そのクラスが #ID ルールで定義されたものと同じでない場合を除き、現在プロパティーに割り当てられているオブジェクトのみをカスタマイズします。 このケースでは、まずオブジェクトが作成されてからカスタマイズされ、次にプロパティーに割り当てられます。これは @# 構造と同じです。
このような調整は、パフォーマンスの観点から必要になります。@# 演算子は、宣言が解決されるたびに新しいオブジェクトを作成します。通常、プロパティーが変更されるたびに宣言が適用されます。特定の環境下では、オブジェクトの作成によって処理コストが高くつく場合があります。そのため、 Rogue Wave® JViews Diagrammer は、プロパティーの変更時にオブジェクトの作成を最小限に抑えるオプションのメカニズムを備えています。

@| 構成

@| で始まる CSS 宣言値は式として解釈されます (『』を参照)。

@ 構成

値が @ である CSS 宣言は、以前のルールで作成されたプロパティー設定をキャンセルします。この構造は、特にデフォルト値が不明なときにプロパティーが変更されないようにする場合に便利です。次に例を示します。
プロパティー設定の取り消し
node {
   width : 23 ;
}

node.fixed {
   width : @ ;
}
これらの 2 つのルールは、ノードに CSS クラス fixed が設定されていない限り、 width プロパティー値を 23 に設定するように定めています。 @ 機能がないと width のデフォルト値は、CSS で記述する必要があります。