-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
表单解析器 · 开发教程 #32
Comments
怎么没有看到表单解析器的开发教程呢 |
同问呢 |
说好的表单解析开发教程呢, 大佬是不是忘记弄了 |
parser啊大哥 大佬开始就写了 这是parser的解说 看下router路由 可以直接用的 扩展的话稍微看下你就懂了不用人家说 并且 编辑的时候运行有单独的iframe引入 已经和这功能解耦了 |
我在parser上通过异步下载json 回来进行解析成页面,所有的表单项都能出来,唯独是表单的校验功能不正常,有大佬能正常校验的吗 |
请问如果设计一个标签组件,内容是一个行容器,可行吗?想了挺久,没想到合适的解决方案,恳请各位大佬指点一下 |
动态数据,除了在formConf 内直接构造外(即在formConf数据未到 parser 解析渲染前),还有其它方式可以动态构造吗 |
请问你的表单校验问题解决了吗? |
同问,为什么我的表单本地数据可以服务端异步传来的解析不成功? |
表单校验的初始化应该是在获取到数据后,可以watch数据,拿到后再构建表单校验规则 |
这是来自QQ邮箱的自动回复邮件。您发送的邮件已收到,任瀚
|
怎么异步解析数据呢?望指教 |
这是来自QQ邮箱的自动回复邮件。您发送的邮件已收到,任瀚
|
请问 解析时候 我加了一个题目逻辑的设置,把不需要的题目隐藏,用display:none; 然后radio的选种样式就没有了,这个有遇到吗 怎么处理 |
这是来自QQ邮箱的自动回复邮件。您发送的邮件已收到,任瀚
|
大侠们,自定义组件应该在哪里获取__config__的数据 |
这是来自QQ邮箱的自动回复邮件。您发送的邮件已收到,任瀚
|
本文描述的解析器,是一个能将form-generator导出的json表单,解析为一个真实表单的程序。
接下来的行文中使用【json表单】表示form-generator导出的json表单。
布局
json表单目前支持两种布局:
colFormItem和rowFormItem
1.1 colFormItem布局
colFormItem布局(以el-input为例)对应的json形式如下:
colFormItem布局对应的目标实际代码如下 :
在这个json到xml的解析过程中,form-generator的parser使用jsx来完成
1.2 rowFormItem布局
rowFormItem布局对应的json形式如下:
对应的目标代码如下:
同样使用jsx来完成布局解析:
值得注意的是,json表单支持嵌套; 通过__config__.children记录嵌套关系。使用renderChildren递归解析。(目前仅对rowFormItem布局的children做解析)
完整的代码,请阅读parse源码,此链接中的版本并不算复杂。
数据和逻辑
传统的vue格式表单,我们可能需要写如下格式的js,完成element UI表单的数据和逻辑。
对于解析器来说,这是一个抽象的过程:
构建表单数据实现如下:
请阅读,源码 methods 部分。这块和你日常vue编程差不多,只不过属性都是抽象的。
JSON表单结构说明
上边的一系列操作,都是建立在理解json表单都有哪些内容的基础上的。详细请参阅JSON参数对照表
form-generator中的render.js
render.js就是对vue的render函数的简单定制封装。如果你还不理解vue的render函数,请移步至:渲染函数 & JSX
render.js实现的功能是将json表单中的__config__.tag解析为具体的vue组件; 其工作过程可以理解为以下3个部分:
关于拓展和讨论
本项目仅仅是开了个表单渲染头;实际要根据需求的差异,要做不一样的定制。之所以在issue写文章,是希望各位能充分利用好下边的评论功能,大家友好探讨。
系列教程:
《表单设计器 · 开发教程》
《表单解析器 · 开发教程》
《vue代码生成器 · 开发教程》
《vue代码预览器 · 开发教程》
The text was updated successfully, but these errors were encountered: