2

ここでは、BBQやjQuery Addressなどの最も人気のあるプラグインを参照する質問を含め、最も人気のある質問をすべて見てきました。

しかし、私が欠けているものがあります。私はそれらのプロジェクトで見たものから一歩後退する指導が必要です。彼らは私が明らかに持っていないいくつかの基本的な知識を前提としており、例のコードの各行が実際に何をしているのかを推測することはできません。

私は4つのことをしたい:

1)AJAX以外のアプリと同じように進むボタンを機能させます。
2)AJAX以外のアプリと同じように戻るボタンを機能させます。
3)ブックマークできるように、URLをアドレスバーに反映します。
4)AJAXのものをクロールできるように、ディープリンクを生成します。

そしてそれがすべてです。それ以外はやり過ぎです。これはRails3.0.4アプリケーションであり、すべて「#」のhrefを持つリンクがあります。リンクの1つをクリックすると、application.jsの関数がアクティブになり、現在のページのdiv内のhtmlが、.js.erbファイルからレンダリングされたパーシャルから作成されたより多くのリンクに置き換えられます。

正常に機能するパンくずリストがありますが、戻るボタンを使用すると、アプリケーションを表示する前に表示していたWebサイトに移動できます。

だから私の質問のいくつかは次のとおりです。

1)各リンクには、単純な「#」ではなく、一意のhref値が必要ですか?
2)そのdivを毎回置き換える必要がありますか、それとも単に非表示にして新しいdivを作成する必要があります。もしそうなら、それぞれの新しいdivは新しいIDを持つべきですか?
3)現在、アドレスバーのURLは変更されておらず、これらのAJAXリクエストはすべてPOSTであるため、アクセス時に必ずGETリクエストをトリガーするこれらの新しいURLの1つに応答するように、Railsで何かを行う必要がありますか?ブラウザの履歴または戻るボタンを介して?

これらは、私がそこにある既存の質問を実行することを妨げている障壁です。あなたが提供できるどんな助けにも感謝します!

編集:

私のアプリケーションはタブベースではありません。ページの読み込み時にすべてのアンカーが使用できるわけではありません。ユーザーがリンクをクリックすると、次のようになります。

1)非表示のフォームのフィールドには、クリックされたリンクのテキスト値が入力されます。

2)非表示のフォームはシリアル化され、POSTを使用してコントローラーアクションに配信されます。

3)コントローラーアクションは、誰が要求を行ったかを判別し、アクセスできるデータを把握し、フォーム値(現在はparams)を使用してオブジェクトのリストを取得します。

4)これらのオブジェクトは.js.erbビューテンプレートに渡され、渡された値でパーシャルがレンダリングされます。

5)新しいリンクは.js.erbテンプレートのjsを介してリバウンドされます。

基本的に、私のデータは静的ではないため、実際に「戻る」には、フォームの状態を現状のままにしてPOSTリクエストを再生成する方法を理解する必要があります。または、フォームの状態と画面を何らかの方法でキャッシュできますか?

4

2 に答える 2

1

基本的に、ajaxアプリで戻るボタンのトリックを有効にすると、URLでハッシュメソッドが使用されます。たとえばwww.myurl.com、ajaxリクエストを行ったときに、別のページまたは別の領域を表示したい場合は、アクションを実行してURLを次のように変更します。www.myurl.com#myaction

詳細については、レミー・シャープによるスクリーンキャストがあります。チェックアウトする必要があります。戻るボタンを有効にする

于 2011-02-24T16:03:35.040 に答える
1

1)各リンクには、単純な「#」ではなく、一意のhref値が必要ですか?

はい、ブラウザはURLの変更のみを検出します。現在のURLがfoo.com/#で、ユーザーがfoo.com/#に移動するリンクをクリックした場合、履歴はどのようにして彼がどこに行ったかを知ることになっていますか?

したがって、#の後に一意のテキストを配置します。foo.com/#homeおよびfoo.com/#aboutは、一意の履歴エントリを生成します。次に、ユーザーがそれらの1つをブックマークすると、URLの後半部分を解析して、ユーザーがどこにいたかを知ることができます。

2)divを非表示にして交換しますか、それとも置き換えますか?

各divのコンテンツを毎回フェッチしない場合は、トラフィックのオーバーヘッドを節約できます。コンテンツが十分に小さい場合は、すべてをページに配置し、divを非表示/表示します。コンテンツが大きい場合は、最初にクリックしたときにのみフェッチします。つまり、私はAにいて、Bをクリックします。Aを非表示にして、Ajaxリクエストを実行してBのコンテンツを取得してから、Bを表示する必要があります。次に、Aに戻ると、すでに存在するAを表示し、Bを非表示にします。必要はありません。すでに持っているときにAを取得するために別のサーバー要求を行うため。

3)現在、アドレスバーのURLは変更されておらず、これらのAJAXリクエストはすべてPOSTであるため、アクセス時に必ずGETリクエストをトリガーするこれらの新しいURLの1つに応答するように、Railsで何かを行う必要がありますか?ブラウザの履歴または戻るボタンを介して?

新しいURLは、戻るボタンを使用するたびにGETリクエストをトリガーしません。#スタイルの便利さは、#以降はサーバーに送信されないことです。つまり、foo.com / bar.html#homeにアクセスすると、クライアントはfoo.com/bar.htmlに対してGETリクエストを行います。その後、ユーザーがfoo.com/bar.html#aboutに移行した場合、ブラウザーはそれ自体で別の要求を行いません。#は元々、同じページ内のコンテンツへのリンクを示すためにありました(つまり、各章の上部にリンクするインデックスが必要な場合がある大きなドキュメント)。

于 2011-02-24T16:21:33.470 に答える