从纸浆psci编辑和运行卤素应用

时间:2017-12-21 20:23:19

标签: purescript halogen

我正在开发一个生成可视化的小型Purescript应用程序。我的架构有点不传统,但我遇到了一些问题。这就是我想要的:

  1. 启动pulp psci -- --port 8080并使用浏览器连接
  2. 调用函数go,该函数接受可视化的定义并将其与一些控件一起呈现
  3. 查看结果。返回REPL并可能创建一些新定义。
  4. 转到第2步,使用go绘制新的可视化效果。
  5. 这种方法与我到目前为止的工作有关,但我的问题是对go的重复调用不会替换DOM的内容,而是添加到它们中。这意味着在几次调用后,我最终得到了所有控件和所有内容的许多副本。

    我意识到这有点像黑客,但我能想到提供这种交互式界面的另一种方法是实现一个编辑器/解析器而且工作量太大有没有办法避免此?

    这是我对go的定义,我想这需要改变:

    go :: Vis -> Eff (HA.HalogenEffects ()) Unit
    go vis = HA.runHalogenAff do
      body <- HA.awaitBody
      runUI checks vis body
    

1 个答案:

答案 0 :(得分:0)

经过批次的实验后,我发现至少有一个看似合理的解决方法是明确删除旧的子节点。我真的不知道后台发生了什么(我运行了一堆无意义的进程吗?)但这符合我的目的:

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