【发布时间】:2021-11-28 13:36:35
【问题描述】:
我正在开发一个Nuxtjs/Vuejs 应用程序来转换XML->JSON,反之亦然。用户可以向textarea 提供值,这些textareas 由CodeMirror 管理。
textarea 从Vex Store 绑定到V-model。我在这些Vuex 状态变量上添加了Watchers,因此每当它们更改值时,我都想将相应的数据转换为不同的格式。即,如果XML 值发生变化,则需要将XML 转换为JSON。同样,如果JSON 的值发生变化,则需要将JSON 转换为XML。
当我将XML 复制粘贴到XML textarea 中时,它第一次可以完美运行,但我进行了任何修改并尝试在XML 中引入一些Syntax 错误,然后我遇到了以下问题: watchers 开始互相调用,最终陷入无限循环。
我在CodeSandbox:https://codesandbox.io/s/boring-water-g14zd?file=/pages/index.vue中提供了示例代码
重现问题的步骤:
- 在
XML Area中提供Sample XML:
<root>
<name>Batman</name>
</root>
我们得到的输出为:CONVERT TO JSON-LD 内的JSON textarea
- 现在通过删除一些
anchor选项卡 (</>) 对XML Textarea中的相同XML进行修改
现在textarea 都填充了Error Message,但实际上我只希望JSON 区域填充Error Message 指示XML 中有什么问题,Modified XML 应该在@987654359 中@。
如果您观察Console,那么您可以看到由于watchers,我遇到了cyclic issue。每当XML 值在XML Editor 内发生变化时,我都想调用jsonConverter,反之亦然,但我不想在converting 到JSON 之后进入XMLConverter。
有人可以向我解释一下如何避免这个问题吗?我没有所有想法,因为我无法直接获得onChange 的CodeMirror 我正在使用Watchers。如果有人有任何想法或解决方案,那就太好了,因为我花了一天多的时间来解决这个问题,但最终一无所获。
代码沙盒: https://codesandbox.io/s/boring-water-g14zd?file=/pages/index.vue
【问题讨论】:
标签: javascript vue.js nuxt.js onchange codemirror