使用通过HTTP GET传递的状态初始化重新框架应用程序

时间:2017-11-01 23:20:54

标签: clojure re-frame

我正在尝试使用重新框架在Clojure中构建一个自包含的结帐流程,其中传递了产品列表,显示了产品详细信息的摘要,必须输入个人信息(例如电子邮件和递送)地址),结果订单将传递到订单管理组件的端点。

有意选择体系结构,以便产品列表组件以与结帐组件相同的方式自包含(从持久性到UI)。

目前,由于在结账结束之前无需保留产品列表,因此我认为结账时的HTTP GET是最佳的集成方式(传递产品ID或更多产品数据)。但是,我正在努力使用重新框架实现这一目标:

re-frame templateid中启动应用程序,如下所示:

index.html

...并定义环处理程序以返回&#34;着陆页&#34;的静态<div id="app"></div> <script src="js/compiled/app.js"></script> <script>myproject.core.init()</script>

index.html

通常,(GET "/checkout" [] (resource-response "index.html" {:root "public"})) 函数现在将从头开始初始化app-db&#34;&#34;使用默认数据或某些持久状态的后端调用;然后将UI组件添加到init()。但是,我不能这样做,因为我尝试初始化的产品列表是瞬态的,并且是从外部提供的,例如作为GET调用的参数。我可以修改路线到

div#app

为了获得它们,但如何将(GET "/checkout" {qs :params} (resource-response "index.html" {:root "public"})) 中包含的产品ID传递给我的前端?到目前为止,我发现的所有可能性都不是特别优雅:

  1. 阅读并返回qs中的内容,并将index.html调用myproject.core.init()替换为<{1}}。
  2. myproject.core.init(product-ids)替换为/checkout,并从/checkout/* - 部分解析前端的ID。
  3. 无论如何都要以某种方式保留产品ID并将其与会话相关联;在初始化app-db时从服务器检索它们。
  4. 有没有更好的方法或可能改进其中一个解决方案的想法?

1 个答案:

答案 0 :(得分:1)

您可以使用服务器上的index.html构建主页,而不是使用单独的hiccup文件。然后,将产品ID列表插入初始化调用中不会有问题。但是,这可能会对您应该衡量的性能产生影响。