1

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

该架构是经过精心挑选的,以便产品列表组件以与结帐组件相同的方式自包含(从持久性到 UI)。

目前,因为在结帐完成之前不需要持久化产品列表,我认为结帐的 HTTP GET 是最好的集成方式(传递产品 ID 甚至更多产品数据)。但是,我正在努力使用重新框架来实现这一目标:

重新框架模板以如下方式启动应用程序index.html

<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"}))

通常,该init()函数现在将使用默认数据或一些后端调用持久化状态“从头开始”初始化 app-db;然后将 UI 组件添加到div#app. 但是,我不能这样做,因为我试图初始化的产品列表是暂时的,并且是从外部提供的,例如作为 GET 调用的参数。我可以修改路线

(GET "/checkout" {qs :params} (resource-response "index.html" {:root "public"}))

为了获取它们,但是如何将包含的产品 ID 传递qs到我的前端?到目前为止,我发现的所有可能性似乎都不是特别优雅:

  1. 读取并返回内容,index.html调用myproject.core.init()替换为myproject.core.init(product-ids).
  2. 替换路由/checkout并从-part/checkout/*解析前端的ID 。*
  3. 以某种方式保留产品 ID 并将它们与会话相关联;初始化 app-db 时从服务器检索它们。

有没有更好的方法或可能性来改进其中一个解决方案的想法?

4

1 回答 1

1

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

于 2017-11-02T09:58:08.573 回答