Angular 架构表单如何工作?
How does Angular Schema Form work?
为什么 Angular Schema Form 具有分开的 json 形式和 json 模式?似乎表单中的某些属性可能在架构中,反之亦然。例如,在 schemaform.io 网站上的简单示例中,我们的形式为:
[
"name",
"email",
{
"key": "comment",
"type": "textarea",
"placeholder": "Make a comment"
},
{
"type": "submit",
"style": "btn-info",
"title": "OK"
}
]
架构为:
{
"type": "object",
"title": "Comment",
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"email": {
"title": "Email",
"type": "string",
"pattern": "^\S+@\S+$",
"description": "Email will be used for evil."
},
"comment": {
"title": "Comment",
"type": "string",
"maxLength": 20,
"validationMessage": "Don't be greedy!"
}
},
"required": [
"name",
"email",
"comment"
]
}
似乎在架构中的 email
属性 中,title
和 description
都可以在表单定义中和在架构中一样.谁能解释一下形式和模式的含义以及为什么它们是分开的?
JSON 架构
JSON Schema 是 IETF 标准(链接自 JSON-Schema docs)
JSON Schema Form 组织(ASF 的一部分)不能 自行更改 JSON Schema 标准。 JSON 模式在现阶段仅设计为模型/验证/超媒体定义格式。
JSON Schema Form 组织正在与 JSON Schema 组织进行直接讨论,我现在也是该组织的一部分,因为我们希望最终定义一个 JSON Schema UI 标准,它最终可能只是一种确保将来不会发生 属性 冲突的方法或更详细的标准。
目前,Angular Schema Form 从 jsonForm 演变而来的方式确实与类似的术语产生了一些混淆,这些术语不能在格式和格式的变体之间以相同的方式使用,例如使用点符号键或只读与只读。
UI 架构
许多使用 JSON Schema 的组织的需要是提供一个 UI 用于编辑由 schema 定义的数据格式,因此 UI Schema 定义了模型应该如何呈现。它允许覆盖架构值,因此架构中的大多数(如果不是全部)值都可以更改,但也可以根据框架内定义的模板添加其他类型(将来可能会更改为不同的术语,如小部件)。
UI 架构还使用数组来确保字段的顺序符合预期,同时提供仅定义一个键以仅从 [=51] 中找到的数据生成表单字段的能力=] 模式定义。如果根本不需要覆盖,您还可以使用通配符和很快的省略号来生成表单元素,甚至不使用键。
关注点分离
不尝试将两者结合起来的原因是为了关注点分离,UI 架构本质上是一种视图控制器。许多企业应用程序将在许多不同的视图中使用相同的数据,例如,当管理员比普通员工拥有更多的编辑数据访问权限时。每次都复制数据模型没有意义,只复制视图。
这对于一个非常基本的表单来说似乎有点矫枉过正,但您永远不知道何时会扩展需求并添加新功能以需要新的数据视图。
通常还需要在浏览器中支持状态信息,其属性在表单中定义,但在模型中找不到。
披露:在撰写本文时,我是 Angular Schema Form 的维护者。
为什么 Angular Schema Form 具有分开的 json 形式和 json 模式?似乎表单中的某些属性可能在架构中,反之亦然。例如,在 schemaform.io 网站上的简单示例中,我们的形式为:
[
"name",
"email",
{
"key": "comment",
"type": "textarea",
"placeholder": "Make a comment"
},
{
"type": "submit",
"style": "btn-info",
"title": "OK"
}
]
架构为:
{
"type": "object",
"title": "Comment",
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"email": {
"title": "Email",
"type": "string",
"pattern": "^\S+@\S+$",
"description": "Email will be used for evil."
},
"comment": {
"title": "Comment",
"type": "string",
"maxLength": 20,
"validationMessage": "Don't be greedy!"
}
},
"required": [
"name",
"email",
"comment"
]
}
似乎在架构中的 email
属性 中,title
和 description
都可以在表单定义中和在架构中一样.谁能解释一下形式和模式的含义以及为什么它们是分开的?
JSON 架构
JSON Schema 是 IETF 标准(链接自 JSON-Schema docs)
JSON Schema Form 组织(ASF 的一部分)不能 自行更改 JSON Schema 标准。 JSON 模式在现阶段仅设计为模型/验证/超媒体定义格式。
JSON Schema Form 组织正在与 JSON Schema 组织进行直接讨论,我现在也是该组织的一部分,因为我们希望最终定义一个 JSON Schema UI 标准,它最终可能只是一种确保将来不会发生 属性 冲突的方法或更详细的标准。
目前,Angular Schema Form 从 jsonForm 演变而来的方式确实与类似的术语产生了一些混淆,这些术语不能在格式和格式的变体之间以相同的方式使用,例如使用点符号键或只读与只读。
UI 架构
许多使用 JSON Schema 的组织的需要是提供一个 UI 用于编辑由 schema 定义的数据格式,因此 UI Schema 定义了模型应该如何呈现。它允许覆盖架构值,因此架构中的大多数(如果不是全部)值都可以更改,但也可以根据框架内定义的模板添加其他类型(将来可能会更改为不同的术语,如小部件)。
UI 架构还使用数组来确保字段的顺序符合预期,同时提供仅定义一个键以仅从 [=51] 中找到的数据生成表单字段的能力=] 模式定义。如果根本不需要覆盖,您还可以使用通配符和很快的省略号来生成表单元素,甚至不使用键。
关注点分离
不尝试将两者结合起来的原因是为了关注点分离,UI 架构本质上是一种视图控制器。许多企业应用程序将在许多不同的视图中使用相同的数据,例如,当管理员比普通员工拥有更多的编辑数据访问权限时。每次都复制数据模型没有意义,只复制视图。
这对于一个非常基本的表单来说似乎有点矫枉过正,但您永远不知道何时会扩展需求并添加新功能以需要新的数据视图。
通常还需要在浏览器中支持状态信息,其属性在表单中定义,但在模型中找不到。
披露:在撰写本文时,我是 Angular Schema Form 的维护者。