正しいAJAXプラクティス


7

「オンラインディスカッション」と呼ばれるコンテンツタイプ(以降、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コンテキストのベストプラクティスは何ですか?


ご覧のように、Facebookは現在すべてを指示しています;)
magtak '26

3
クレイジーな人がやって来て「ベスト」を見て、質問を読む代わりにすぐに閉じるので、タイトルを「ベスト」を含めないように変更する必要があります。それが起こります。Stack Exchangeに関する「最高」という言葉は嫌いです。
o_O 2012年

回答:


2

まず第一に、あなたはここで質問が多すぎます。この小説全体をスタック交換にダンプして誰かがあなたの問題をすべて解決するのではなく、この問題を小さなチャンクに分割して、それぞれを解決することをお勧めします。

多分それは厳しいように聞こえるかもしれませんが、まだ返信がないのには理由があります。

私はに向かってあなたを指すことができますDrupalのの、一度機能あなたは、少なくともあなたのonLoad難問に対処役立ちます。(ヒント:これまで、onLoadを使用しないでください。)

一般に、Drupalでサイトを構築していて、希望することを実行するためのモジュールが見つからず、多くのPHPまたはJavaScriptまたは独自のカスタム機能を作成している場合は、検討することをお勧めします。新しいアプローチ。

あなたが達成しようとしている振る舞いを達成するためのライブラリをおそらく提供する多くのフロントエンドフレームワークがあります。問題の解決に近づき、負荷がかかってもうまく機能するものを見つけて、それをあなたの使用に適合させてください。


plzが
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.