我正在尝试使用重新框架在 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
到我的前端?到目前为止,我发现的所有可能性似乎都不是特别优雅:
- 读取并返回内容,
index.html
调用myproject.core.init()
替换为myproject.core.init(product-ids)
. - 替换路由
/checkout
并从-part/checkout/*
解析前端的ID 。*
- 以某种方式保留产品 ID 并将它们与会话相关联;初始化 app-db 时从服务器检索它们。
有没有更好的方法或可能性来改进其中一个解决方案的想法?