如何在2sxc模块中为自定义输入实现值的保存与加载功能
2sxc自定义纯文本输入的保存与加载实现方案
你提到的操作this.connector.data的思路是正确的,核心逻辑确实围绕这个对象实现,不过不需要把所有逻辑都放在init函数中,分加载、保存两个场景处理即可:
值加载逻辑
2sxc自定义输入组件初始化时,会自动把当前字段的已存值注入到
this.connector.data对象中,不需要在init里单独写读取逻辑。你只需要在组件的渲染生命周期(比如Web Component的connectedCallback、所用前端框架的mount钩子)中,把this.connector.data.value赋值给你的纯文本输入框的value属性即可。
参考代码:connectedCallback() { // 渲染自定义纯文本输入框 this.innerHTML = `<input type="text" id="custom-plain-input" />`; this.inputDom = this.querySelector('#custom-plain-input'); // 加载已保存的字段值,无值时默认设为空字符串 this.inputDom.value = this.connector.data.value || ''; }值保存逻辑
不需要手动触发提交逻辑,你只需要监听输入框的内容变化事件,每次内容变更时把新值同步到
this.connector.data.value上,2sxc会在表单提交时自动读取这个属性的值完成保存。
参考代码:// 监听输入变化,实时同步值到connector对象 this.inputDom.addEventListener('input', (e) => { this.connector.data.value = e.target.value.trim(); });init函数的适用场景
只有当你需要在值加载完成后执行额外的自定义处理(比如输入格式校验、特殊字符过滤、权限判断)时,才需要用到
init函数,它会在connector对象完全初始化、数据加载完成后触发:init() { // 此处可以保证this.connector.data已经完成加载 // 示例:对已存值做特殊格式化 if(this.connector.data.value) { this.connector.data.value = this.connector.data.value.toUpperCase(); this.inputDom.value = this.connector.data.value; } }
注意:不要直接修改
this.connector对象本身,仅修改它下属的data.value属性即可,修改其他内置属性可能会导致2sxc的表单逻辑出现异常。
内容的提问来源于stack exchange,提问作者Constantine Ketskalo
相关产品推荐
相关产品推荐

