# アプリケーション開発ソースコード：.ui 拡張子ファイルの仕様説明

Bricksはサーバー側で、.ui 拡張子のJSONファイル形式を使用して、コントロール（ウィジェット）の記述ファイルを保存しています。フロントエンドは .ui ファイルのJSONデータを取得後、JSONオブジェクトに変換し、そのJSONオブジェクトを使って `widgetBuild` 関数を呼び出してBricksのコントロールを作成します。

.ui ファイルは jinja2 テンプレートをサポートしているため、フロントエンドのコントロール属性やデータを動的に生成できます。

### コントロール記述データの仕様要件

```json
{
    "id",               // オプション。省略された場合、自動的にUUID形式のIDが生成されます。
    "widgettype",       // 文字列型の属性。値はBricksに登録されたコントロール名、または"urlwidget"、"options"
    "subwidgets",       // 配列型。コンテナーコントロールのみ必要。配列の各要素は子コントロールの記述データです。
    "binds"             // イベントハンドリングを定義。後述のイベント処理の説明を参照。
}
```

コントロール記述用のJSONファイルには、「widgettype」と「options」の2つのプロパティが必須です。「subwidgets」プロパティは、このコントロールが含む子コントロールを定義するために使用されます。「binds」は、このコントロールまたはその子コントロールのイベント処理を定義するために使用されます。

## widgettype の説明

値は、Bricksに登録されたコントロール名、または「urlwidget」です。`widgettype` は、このコントロールがBricksのどのコントロールであるかを定義します。値が「urlwidget」の場合、コントロールのデータはサーバーから取得され、その `options` には特別なルールが適用されます。

## options

コントロールの初期化パラメータです。コントロール自体が定義する初期化パラメータもあれば、祖先クラスの初期化パラメータも含まれます。`widgettype` が「urlwidget」の場合、`options` は以下の仕様を満たす必要があります。

```json
{
    "url",              // コントロールデータを取得するためのURL
    "method",           // HTTPメソッド（例："GET"、"POST"など）
    "params"            // 辞書形式のデータ。HTTPリクエストに付随するパラメータ
}
```

## binds

リスト型の属性で、コントロールのイベント処理を定義します。リスト内の各項目は一つのイベント処理を定義します。Bricksは5種類のイベント処理方法をサポートしています。

- urlwidget
- method
- script
- registedfunction
- event

`binds` 内では、これらの5つのイベント処理方法をいずれも定義でき、同じコントロール内で異なるイベントに対して異なる処理方法を柔軟に組み合わせて使用できます。

以下の機能をサポートしています：

* `binds` を持つコントロール自身のイベント処理を定義可能
* `binds` を持つコントロールの子（または孫）コントロールのイベント処理を定義可能
* アプリケーションのコントロールツリー上の任意の 'wid' に対応するコントロールのイベント処理を定義可能
* 同じコントロールの同じイベントに対して複数の処理方法を定義でき、定義された順序に従って順次処理される

詳細なイベント処理については、[Bricksのイベント処理](event.md) をご参照ください。