我正在研究一个生成可视化的小型Purescript应用程序。然而,我的架构有点不传统,我遇到了一些问题。这就是我想要的:
pulp psci -- --port 8080
并使用浏览器连接go
,它接受可视化的定义并将其与一些控件一起呈现go
绘制新的可视化。这种方式与我到目前为止的工作有关,但我的问题是重复调用go
不会替换DOM的内容,而是添加到它们中。这意味着在几次调用后,我最终得到了所有控件和所有内容的许多副本。
我意识到这有点像黑客,但我能想到提供这种交互式界面的另一种方法是实现一个编辑器/解析器而且工作太多有没有办法避免这种情况?
这是我对go
的定义,我想这需要改变:
go :: Vis -> Eff (HA.HalogenEffects ()) Unit
go vis = HA.runHalogenAff do
body <- HA.awaitBody
runUI checks vis body
经过大量的实验,我发现至少有一个看似合理的解决方法是明确删除旧的子节点。我真的不知道后台发生了什么(我运行了一堆毫无意义的进程吗?)但这适用于我的目的:
go :: VVis -> Eff (HA.HalogenEffects ()) Unit
go vis = HA.runHalogenAff do
body <- HA.awaitBody
let nb = htmlElementToNode body
_ <- H.liftEff $ whileJust
(firstChild (htmlElementToNode body))
(\n -> removeChild n (htmlElementToNode body))
runUI checks vis body