bricks/docs/ai/brief.md
2025-11-13 18:04:58 +08:00

107 lines
3.3 KiB
Markdown
Raw 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类。每个控件均可以实例化并可在页面显示。
控件分为:基本控件,容器控件。
* 基本控件
基本控件是一个原子控件,不能有子控件。
* 容器控件
容器控件可以有子控件bricks通过在容器控件添加子控件以及在子容器控件中
在添加子子控件的方式来构造复杂的web页面。
控件的详细介绍请参看[控件说明](widgets.md)
### 控件扩展
如果现有的控件没法满足系统要求bricks支持控件扩展控件扩展需遵守
* 控件class继承自某一个控件的class
* 按照需求实现控件逻辑
* 在需要的地方用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元素的事件以及控件js类的成员函数以及祖先类的
成员函数中dispatch出的事件
所以bricks控件的事件来源于两类dom元素原生事件以及控件类中创造的事件。
两类事件处理方式相同。
### 控件表达形式
在服务器的后台以json文件的形式表达控件每个ui文件定义一个控件
对于容器控件可以在ui文件中的subwidgets子属性中为此控件添加子控件
#### id属性
字符串属性定义控件的id让控件可以用getWidgetById找到如果不给定系统会自动生成一个id
#### options属性
字典属性,创建控件时的选项,每个控件可接受的选项请参看控件选项说明
#### binds属性
数组属性定义零到多个事件响应每个bind字典需要遵守[事件](event.md)要求
#### 容器控件特有属性
##### subwidgets
数组属性,定义容器控件的子控件,每个元素定义一个子控件,子控件遵守控件的数据要素要求
## 开发
使用存放在服务器后台的.ui后缀的json格式文件来开发每个.ui文件定义一个控件 支持基本控件和容器空间。
关于如何书写ui文件请参考[UI文件格式](descjson.md)
## 调试
ui文件可以直接调试如在服务器根目录下的test目录下有一个hello.ui文件
就可以在浏览器中用urlhttps://sername/test/hello.ui调试