1
正しいAJAXプラクティス
「オンラインディスカッション」と呼ばれるコンテンツタイプ(以降、ODと呼ばれます)と「オンラインディスカッション返信」と呼ばれるコンテンツタイプ(以降、ODRと呼ばれます)があります。エンティティ参照(drupal.org/project/entityreference)を相互に持つ。 1つのODRが(フロントエンドのカスタムフォームを介して)作成されると、その「親」(作成されたページのOD)を参照し、対応するエンティティ参照(drupal.org/project/cer)を介して同じことが逆に発生します。 ODのページでは、テーマ設定により、参照されているODRの特定の量(最新の10個)が表示されます。現時点では、ビューやパネルの関与なしにレンダリングされたエンティティとして表示されますが、必要に応じて変更することもできます。 各ODRには返信フォームの独自のインスタンスがあり、引用機能が強化されています。 また、ODRは、カスタムフロントエンドフォームを介して、特定のロールからのコメントを受け入れることもできます。 要求事項: 1)以前の(すべてまたはバッチの)応答をAJAXでロードする方法が必要です。現在、jQuery ajaxコールバックを起動して、それに応じて以前のODRをフェッチするビューページにアクセスし、それらのHTMLをDOMに挿入しています。これは機能しますが、200を超えるノードが参照されるテストケースシナリオでは、しばらく時間がかかるようです 2)一定の時間間隔の後、新しいODRを探し、それらに追加して、ODに「ライブライク」な動作を与える方法が必要です。現時点ではこれを同じ方法で行っていますが、問題なく動作するようです。 3)サイトに来る新しい要素にDrupal Behaviorsを適用して、コンテキストリンクが機能するようにするなどの効率的な方法が必要です。Drupal.attachBehaviors(context);を使用してそれを行いました。しかし、問題があります。 これまでの問題: I.同じページ上の同じフォームの複数のインスタンス。 Drupalは最初のODページのロード時にdrupal_html_id()を処理しますが、AJAXを使用する方法はIDの一意性を壊します。たとえば、初期ロードに10個のフォームがあり、AJAXを介して2個追加すると、全体として生成されたビューのHTMLを取得するため、最初の2個のIDが繰り返されます。 II。「以前のすべてのODRをロードする」ケースでのパフォーマンスの問題。かなり自明です。200以上のエンティティをプルし、それらのHTMLを挿入するのはかなり大変です。 III。Drupal.attachBehaviors-私が説明したようにAJAXを使用すると、コンテキストリンクのHTMLは問題なく生成されます。関係するJavaScriptで問題が発生します。数時間の調査の後、これに関するドキュメントがほとんどないため、私はその問題をかなり解決したDrupal Behaviorsに出会いましたが、対処する新しい一連の問題が発生しました。 onLoadイベントが動作になり、AJAXイベントが発生するたびに実行され、複数のイベントバインディングが発生する(現時点ではバインドソリューションの前にバインド解除) 複数のフォームが使用するテキスト領域の縮小などの一部のonLoadイベントは、使いやすさの問題を引き起こします。たとえば、返信またはコメントを入力すると、定期的なajax呼び出しによって新しいODRがサイトに送信され、テキスト領域が折りたたまれます。 jQueryを介してすべての可能性を確実に処理するためにコードを管理するのはかなり面倒で段階的に困難 それで、最後に、質問: 説明されている望ましい結果を達成するためのDrupalコンテキストのベストプラクティスは何ですか?