bricks/docs/ja/brief.md
2025-11-19 12:30:39 +08:00

112 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# bricksフレームワークの紹介
## 目次
* bricksの目的
* bricksの概念
* bricksの開発手法
* bricksの実行方法
## bricksの目的
* フロントエンドコードが不要、または極力少ない
* フロントエンド開発の技術的ハードルを下げる
* データ駆動型
* よく使われるコントロール(部品)をラップ化
* 純粋なJSONによる開発
## bricksの概念
* コントロールとコントロールの継承
* イベントおよびイベント処理
* コントロールのネストとページの構成
### コントロールとコントロールの継承
bricksは「コントロール」という概念を使ってWeb GUIの表示要素を表現しています。各コントロールは、HTMLタグに対応するJavaScriptクラスにマッピングされています。すべてのコントロールはインスタンス化でき、画面に表示可能です。
コントロールは以下の2種類に分けられます基本コントロール、コンテナーコントロール。また、各コントロールには組み込みメソッドがあり、イベントを発生させることもできます。
* 基本コントロール
基本コントロールはアトミック(原子的)なコントロールであり、子コントロールを持つことはできません。
* コンテナーコントロール
コンテナーコントロールは子コントロールを持つことができます。bricksでは、コンテナーコントロールに子コントロールを追加し、さらにその子コンテナー内にもさらに子コントロールを追加することで、複雑なWebページを構築します。
実装済みのbricksコントロールの一覧については、[コントロール一覧](widgets.md) を参照してください。
### コントロールの拡張
既存のコントロールでは要件を満たせない場合、bricksではコントロールの拡張が可能です。拡張を行う際には以下のルールに従ってください
* コントロールのクラスは、既存の何らかのコントロールクラスを継承すること
* 必要に応じてコントロールのロジックを実装すること
* 必要な場所で `this.dispatch` を使ってこのコントロールのイベントを発火させること
例えば、「ExtContainer」という名前のコントロールを拡張したい場合
```
bricks.ExtContainer = class extends bricks.VBox {
constructor(opts){
super(opts);
/* 新しいコントロールの生成コード */
}
......
/* その他のメソッド。必要に応じて、あるメソッド内で this.dispatch('new_event', data) を呼び出してイベントを発火 */
}
bricks.register('ExtContainer', bricks.ExtContainer); /* 新しいコントロールを登録 */
```
新しく作成したコントロールの使用例example.ui
```
{
"widgettype":"ExtContainer",
"options":{
....
},
"subwidgets":[
...
],
"binds":[
{
"wid":"self",
"event":"new_event",
"actiontype":"urlwidget",
"target":"some_container",
"options":{
"url":"{{entire_url('./some_ui.ui')}}"
}
}
]
}
```
### イベントおよびイベント処理
各コントロールは、対応するDOM要素のイベント、およびコントロールのJavaScriptクラスやその継承元クラスのメンバ関数内で `dispatch` によって発生したイベントをトリガーできます。
つまり、bricksのコントロールが発生させるイベントは以下の2種類です
1. DOM要素のネイティブイベント
2. コントロールクラス内でカスタム定義されたイベント
上記2種類のイベントは、同じ方法で処理されます。
### コントロールの表現形式
サーバー側のバックエンドでは、JSONファイルの形式でコントロールを表現します。各UIファイルは1つのコントロールを定義します。コンテナーコントロールの場合、UIファイル内の `subwidgets` 子プロパティに子コントロールを追加できます。
#### id属性
文字列型の属性。コントロールのIDを定義し、`getWidgetById` で検索できるようにします。指定しない場合は、システムが自動的にIDを生成します。
#### options属性
辞書型の属性。コントロール生成時のオプション。各コントロールが受け入れ可能なオプションについては、[コントロールオプションの説明]を参照してください。
#### binds属性
配列型の属性。0個以上のイベント応答を定義します。各bindオブジェクトは[イベント](event.md)の仕様に準拠している必要があります。
#### コンテナーコントロール固有の属性
##### subwidgets
配列型の属性。コンテナーコントロールの子コントロールを定義します。各要素が1つの子コントロールを表し、子コントロールはコントロールのデータ要件に従う必要があります。
## アプリケーション開発
サーバーのバックエンドに配置された `.ui` 拡張子のJSON形式ファイルを使用して開発を行います。各 `.ui` ファイルは1つのコントロールを定義し、基本コントロールおよびコンテナーコントロールの両方をサポートしています。
UIファイルの書き方については、[UIファイルフォーマット](descjson.md) をご参照ください。
## デバッグ
UIファイルは直接デバッグが可能です。たとえば、サーバーのルートディレクトリ下の `test` ディレクトリに `hello.ui` というファイルがある場合、ブラウザで以下のURLにアクセスしてデバッグできます
`https://sername/test/hello.ui`