2017-11-01 10 views
1

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を渡すのですか?

  1. 読み取りをしてmyproject.core.init(product-ids)のようなものに置き換えmyproject.core.init()を呼び出してindex.htmlから内容を返す:私はこれまでに見つかったすべての可能性がparticularyエレガントないないようです。
  2. /checkout/checkout/*で置き換え、* -partからフロントエンドのIDを解析します。
  3. とにかくプロダクトIDを何らかの形で保持し、それらをセッションに関連付けます。 app-dbを初期化するときにそれらをサーバから取得します。

ソリューションのアイデアを改善する方法はありますか?

答えて

1

別のindex.htmlファイルを使用する代わりに、サーバー上でhiccupを使用してメインページを構築することができます。その後、製品IDのリストを初期化呼び出しに挿入することは問題にはなりません。ただし、パフォーマンスに影響を与える可能性がありますが、測定する必要があります。

+0

あなたはこれを正しい解決策と考えていますか、間違ったトラックに入っていますか?パフォーマンスへの影響について:動的ヒルカップからスタティックHTMLを一度生成することはできますか(ビルド中)、パラメータ化されていないコールについてはどうですか?確かに; – notan3xit

+1

;いくつかの変数にヒカップ出力を格納するだけです。また、あなたのパラメータにいくつかのキャッシュ戦略が働いているかどうかを見ることができます。 – Svante

+0

最初の質問について:私は誰に伝えたいですか? – Svante

関連する問題