在处理公文时,用户会填写标题、附注、选择主抄送、生成文档等,这些事情一部分是由用户在表单中填写的,另一部分则通过自动计算或用户选择等操作提供的。要将这些内容反应到公文编辑器的公文元素中,可以直接给编辑器的data赋值(给编辑器赋值),但最好的方法是使用数据绑定。
你可以为每一个版面元素绑定一个表单可输入字段,或者绑定一个方法。
正如“访问版面元素”章节中所描述的,每个版面元素有以下配置项,用于值的绑定:
- [name]ValueType:绑定值的类型
- [name]ValueData:绑定表单输入框的选择器
- [name]ValueScript:绑定值的脚本内容
下面介绍这几个配置项的使用。
绑定表单可输入字段
如果一个版面元素绑定了表单可输入字段,如:input text;input radio;input checkbox;select等表单字段时,当表单元素的值发生改变时,编辑器的内容,也会随之变化。
例如,我们要将编辑器的标题字段,与表单上一个id为“title”的input输入框绑定时,就可以在编辑器初始化时设置配置项:subjectValueType 和 subjectValueData:
const editor = DocEditor.createEditor(div, {
//我们在打包配置中将public目录输出到了 doceditor/public,
//所以此处需要配置为'./doceditor/' 或 'doceditor/'
base: './doceditor/',
//绑定值的类型,可选值:"data", "script"
//"data"表示绑定一个表单可输入字段
//"script"表示绑定一个function或一段脚本
subjectValueType: "data",
//subjectValueType配置项为data时生效
//设置表单输入框的选择器
subjectValueData: "#title"
});
editor.load();
说明一下这些参数:
subjectValueType | 绑定数据的类型,取值为“data”(默认)或“script”,此处data表示:将公文编辑器 标题的显示内容,绑定到表单中的dom元素的value,一般是绑定到<input><textarea><select>等元素。 |
subjectValueData | 标题要绑定的dom元素的选择器。 |
然后当用户在表单中修改标题值时,公文编辑器的标题会和title输入框的值保持同步。(编辑器的同步渲染是在输入框的change事件中,所以只有当焦点移出输入框时触发)
您可以在在线编辑器中尝试:在线运行本样例
通过注入函数绑定
一些情况下,我们要在公文要素中显示的内容,不完全是用户输入的内容,而是根据文档的数据计算出的一个结果,没有一个表单元素可以绑定,那我们就可以注入函数的方式,将公文要素的值绑定到一个函数。
例如对文号的设置,一般会使用一套自动编号机制,并计算当前年份以及发文部门的冠字等,最终拼接出文号,那我们就可以将文号绑定到一个函数。
const editor = DocEditor.createEditor(div, {
//我们在打包配置中将public目录输出到了 doceditor/public,
//所以此处需要配置为'./doceditor/' 或 'doceditor/'
base: './doceditor/',
//绑定值的类型,可选值:"data", "script"
//"data"表示绑定一个表单可输入字段
//"script"表示绑定一个function或一段脚本
filenoValueType: "script",
//filenoValueType配置项为script时生效
//设置一个Function
filenoValueScript: ()=>{
const year = (new Date()).getFullYear();
return `xxx〔${year}〕5号`
}
});
editor.load();
filenoValueScript参数也可以传入一个包含code的对象,code中传入javascript代码字符串,如下面的filenoValueScript设置和上面的设置是等价的:
filenoValueScript: {
code: "const year = (new Date()).getFullYear(); return `xxx〔${year}〕5号`"
}
说明一下这些参数:
filenoValueType | 绑定数据的类型,取值为“data”(默认)或“script”,此处script表示:将公文编辑器 文号的显示内容,绑定到由“filenoValueScript”参数指向的函数。 |
filenoValueScript | 文号要绑定到的函数。 注意:script方式绑定公文编辑器数据不是响应式的,如果需要更新编辑器显示,要调用editor.resetData()或editor.getData()方法。 |
在编辑器载入时,filenoValueScript配置绑定的函数会被执行一次,之后如果希望更新文号值,则需要调用编辑器的resetData或getData方法。
您可以在在线编辑器中尝试:在线运行本样例