現在、サーバー側でリフトを使用し、すべての視覚化に d3 (javascript 視覚化フレームワーク) を使用してグラフ視覚化ツールを実装しています。私が抱えている問題は、スクリプトでサーバーからセッション依存のデータを取得したいということです。
基本的に、私の目的は、リフト有効な ajax コールバックを静的 js スクリプトで記述することです。
これまでに試したこと
最善の解決策が私がすでに試したものであると思われる場合は、詳細な回答を投稿して、それを正確に使用する方法と、問題を完全に解決する方法を教えてください。
リフトを使用して別のスクリプトに ajax コールバックを記述し、メイン スクリプトから呼び出す
隠しテキスト入力に似たこのソリューションは、おそらく機能する可能性が高くなります。ただし、エレガントではなく、ロード時に多くのスクリプトをロードする必要があり、あまり便利ではありません。
これは、メーリング リストのこのディスカッションで説明されているように、lift コミュニティで推奨されるソリューションの 1 つです。
REST インターフェイス
通常、lift で JavaScript 関数からデータを取得するために行うことは、REST インターフェースを作成することです。ただし、このインターフェイスはどのセッションにもリンクされません。これは、以前の質問から得た解決策です: Get json data in d3 from lift snippet
スクリプトの引数として関数を与える
別の解決策は、グラフを生成するために呼び出されるメイン スクリプトの引数として ajaxcallback を指定することです。ただし、多くのコールバックがあると予想され、スクリプトの引数をいじる必要はありません。
Lift でスクリプト全体を作成し、それをクライアントに提供する
このソリューションは洗練されたものになる可能性がありますが、私のスクリプトは非常に長いので、静的なままにしておきたいと思います。
私が欲しいもの
クライアント側
私の Web ページのソース コードを確認しているときに、ajaxSelect のコールバックが次のようになっていることがわかりました。
<select onchange="liftAjax.lift_ajaxHandler('F966066257023LYKF4=' + encodeURIComponent(this.value), null, null, null)" name="F96606625703QXTSWU" id="node_delete" class="input">
さらに、Web ページの最後にページの状態を含む変数があります。
var lift_page = "F96606625700QRXLDO";
liftAjax.lift_ajaxHandler
したがって、この関数を使用して ajaxcall が有効であることをシミュレートできるかどうか疑問に思っています。ただし、使用する正確なシンタックスはわかりません。
サーバー側
クライアント側でリクエストを「偽造」したので、クライアント側でリクエストを取得し、正しい関数にディスパッチしたいと思います。これは、LiftRules.dispatch
オブジェクトが最適なソリューションと思われる場所です。オブジェクトが呼び出されると、すべてのセッション管理が行われます (リクエストが認証され、セッションにリンクされます)。append
関数。
述べる
Lift では、セキュリティを強化するために、変数のすべての名前がランダムな文字列に変更されます。おそらく、JavaScript にこれらの値を「与える」必要があることを意味する場合でも、アプリケーションで同じ動作をしたいと考えています。ただし、15 個の文字列値の配列は、javascript 関数の引数として 15 個の関数よりも優れたトレードオフです。
編集
私の研究をたどっているときに、このページを見つけました:サーバー関数をクライアントアクションにマッピングすることで、名前付き関数の目標を何らかの形で説明していますが、それが機能するソリューションにつながらなかったとしても。