ohayolibs
Version:
Ohayo is a set of essential modules for ohayojp.
96 lines (74 loc) • 2.25 kB
Markdown
order: 99
title: 常见问题
type: Documents
## path
有许多方法都需要传递 `path` 参数,它使用 `/` 分隔符来表示访问表单对象路径,例如一个 JSON Schema 示例:
```ts
schema: SFSchema = {
properties: {
app: {
type: 'string',
title: 'APP',
},
user: {
type: 'object',
properties: {
name: {
type: 'string',
},
age: {
type: 'number',
},
}
},
}
};
```
以下 `path` 行为都有效:
- `/app`
- `/user/name`
使用 `/` 开头时表示从根路径查找,反之从当前路径向下查找。
## 为什么非实时校验部分自定义校验无法生效?
由于非实时校验(设置 `liveValidate:false`)不会重新对每个元素执行一次校验,虽然能做到,但自定义校验有可能存在异步,无法保证执行的顺序,因此非实时校验实际只对 JSON Schema 本身的校验。
## 如何动态使用 Schema?
一般分为两种情形:
**1、Schema 定义后可能受限于某个数据来自远程**
```ts
@ViewChild('sf', { static: false }) sf: SFComponent;
schema: SFSchema = {
properties: {
app: {
type: 'string',
title: '附属应用',
ui: 'select',
enum: []
}
}
};
ngOnInit() {
this.http.get('/apps').subscribe(res => {
this.schema.properties.app.enum = res;
this.sf.refreshSchema();
});
}
```
**2、远程 Schema**
```ts
schema: SFSchema = {
properties: {}
};
ngOnInit() {
this.http.get('/schema').subscribe(res => this.sf.refreshSchema(res));
}
```
## 什么时候使用 `default`?
Schema 的 `default` 用于设置初始化,一般情况下当修改表单时是需要提供 `formData` 参数,但对于增加表单来说,应该依靠 `default` 提供一个更友好的表单给用户。
## 如何刷新特定 Schema?
可以通过 `getProperty` 方法来获取某个 Schema 的属性,其属性包含 Schema 数据以及 Ui 数据,可以修改这些数据,并重新调用小部件的 `reset` 方法重新渲染该 Schema,例如:
```ts
const statusProperty = this.sf.getProperty('/status')!;
statusProperty.schema.enum = ['1', '2', '3'];
statusProperty.widget.reset('2');
```