Clojureで、製品のリストが渡される再フレームで自己完結型のチェックアウトプロセスを構築しようとしていますが、個人情報(電子メールや配達先住所など)を入力する必要があり、その結果得られた注文は注文管理コンポーネントのエンドポイントに渡されます。HTTP GETを経由した状態でリフレームアプリケーションを初期化する
アーキテクチャは意図的に選択され、製品リストコンポーネントはチェックアウトコンポーネントと同じ方法(永続性からUIへ)で含まれています。
現在、チェックアウトが完了する前に製品のリストを保持する必要がないため、チェックアウトに対するHTTP GETが統合の最善の方法(製品IDまたはさらに多くの製品データの受け渡し)であると推測します。
<div id="app"></div>
<script src="js/compiled/app.js"></script>
<script>myproject.core.init()</script>
...との静的index.html
を返すために、リングハンドラを定義しています。
re-frame templateはそうのようなindex.html
でアプリケーションを開始します。しかし、私は再フレームを使用していることを達成するために苦労しています「ランディングページ」:通常
(GET "/checkout" [] (resource-response "index.html" {:root "public"}))
、init()
機能は、デフォルトのデータまたは永続状態のためのいくつかのバックエンド呼び出しで「ゼロから」アプリ-DBを初期化します。 UIコンポーネントをdiv#app
に追加します。しかし、私が初期化しようとしている製品リストは一過性であり、外部から提供されているため、私はそれを行うことはできません。 GET呼び出しのパラメータとして使用します。私はそれらを得るために、
(GET "/checkout" {qs :params} (resource-response "index.html" {:root "public"}))
へのルートを変更することもできますが、どのように私は私のフロントエンドにqs
に含まれる製品IDを渡すのですか?
- 読み取りをして
myproject.core.init(product-ids)
のようなものに置き換えmyproject.core.init()
を呼び出してindex.html
から内容を返す:私はこれまでに見つかったすべての可能性がparticularyエレガントないないようです。 /checkout
を/checkout/*
で置き換え、*
-partからフロントエンドのIDを解析します。- とにかくプロダクトIDを何らかの形で保持し、それらをセッションに関連付けます。 app-dbを初期化するときにそれらをサーバから取得します。
ソリューションのアイデアを改善する方法はありますか?
あなたはこれを正しい解決策と考えていますか、間違ったトラックに入っていますか?パフォーマンスへの影響について:動的ヒルカップからスタティックHTMLを一度生成することはできますか(ビルド中)、パラメータ化されていないコールについてはどうですか?確かに; – notan3xit
;いくつかの変数にヒカップ出力を格納するだけです。また、あなたのパラメータにいくつかのキャッシュ戦略が働いているかどうかを見ることができます。 – Svante
最初の質問について:私は誰に伝えたいですか? – Svante