编辑和 运行 纸浆 psci 的卤素应用
Editing and running Halogen applications from pulp psci
我正在开发一个生成可视化的小型 Purescript 应用程序。然而,我的架构有点非传统,而且我遇到了一些问题。这就是我想要的:
- 启动
pulp psci -- --port 8080
并连接浏览器
- 调用函数
go
接受可视化的定义并将其与一些控件一起呈现
- 查看结果。返回 REPL 并可能创建一些新定义。
- 转到第 2 步并使用
go
绘制新可视化效果。
这种方法适用于我目前所拥有的,但我的问题是重复调用 go
不会替换 DOM 的内容,而是添加到它们中。这意味着在几次调用之后,我最终得到了所有控件和所有内容的许多副本。
我意识到这有点 hack,但我能想到的提供这种交互式界面的唯一其他方法是实现 editor/parser,这工作量太大了有没有办法避免这个?
这是我对 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
我正在开发一个生成可视化的小型 Purescript 应用程序。然而,我的架构有点非传统,而且我遇到了一些问题。这就是我想要的:
- 启动
pulp psci -- --port 8080
并连接浏览器 - 调用函数
go
接受可视化的定义并将其与一些控件一起呈现 - 查看结果。返回 REPL 并可能创建一些新定义。
- 转到第 2 步并使用
go
绘制新可视化效果。
这种方法适用于我目前所拥有的,但我的问题是重复调用 go
不会替换 DOM 的内容,而是添加到它们中。这意味着在几次调用之后,我最终得到了所有控件和所有内容的许多副本。
我意识到这有点 hack,但我能想到的提供这种交互式界面的唯一其他方法是实现 editor/parser,这工作量太大了有没有办法避免这个?
这是我对 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