2

完全な ajax サイトがハッキングされているため、この jQuery プラグイン
http://www.asual.com/jquery/address/ を使用していますが、アクション/メソッドも html リクエストに応答します。
Rails 3.1.0

リンクがあれば

<%=link_to "my link",{:controller=>"my_controller",:action=>"my_action"},:remote=>true%>

それは呼び出しを行いますが、URL は同じままです。URL を共有すると、常にルート ページ/ページが表示されますが、このプラグインを使用すると、のリモート メソッドを呼び出してmy_controller、表示する URL を変更することもできます

var elemetns = $("a.addressPlugin");
 $.address.crawlable(1).state('/').init(function(){
    elemetns.address();
 });

私の新しいリンク

<%=link_to "my link",{:controller=>"my_controller",:action=>"my_action"},:class=>"addressPlugin",:remote=>true%>

今私のURLは次のようになります

http://localhost:3000/my_controller/my_action

しかし、ブラウザに戻ったとき、ページは変更されずに残ります

それから私はこれをすることを考えました

var elemetns = $("a.addressPlugin");
 $.address.crawlable(1).state('/').init(function(){
    elemetns.address();
 }).change(function(e){
        $.ajax({type:'GET',url:e.path,dataType:'script',cache:true});
 });

だから今、それは前後にトリックを行いますが....

リンクをクリックすると、リモート呼び出しが2回行われます....リンク自体に対して1回、.change(...メソッドに対して1回....しかし、逆に戻ると、.change(...メソッドで1回だけ呼び出しが行われます....それで

$.ajaxリンクをクリックするときではなく、ブラウザーで前後に移動するときにのみ呼び出しが行われるのを防ぐにはどうすればよいですか?

<< -- 更新 -- >>
Safari および Chrome ブラウザで、メイン ページから 1 ステップ戻って履歴を表示し、ブラウザのボタンを使用して先に進むと、完全に白い画面が表示され、main/indexビューをロードする JavaScript 関数のみが表示されます。 ajax経由ですが、ブラウザにはそれしかありません

Webページの代わりに表示するJavascript関数

<< -- 更新 -- >

基本的にこれは私が複製しようとしているものですが、Ruby on Rails とそのremote links

http://www.asual.com/jquery/address/samples/state/

4

3 に答える 3

0

なぜ.changeイベント バインダーを使用するのですか? .click代わりにイベント バインダーを使用してみてください。また、return false;デフォルト動作を防止するために作成してください。

var elemetns = $("a.addressPlugin");
$.address.crawlable(1).state('/').init(function(){
    elemetns.address();
}).click(function(e){
    $.ajax({type:'GET',url:e.path,dataType:'script',cache:true});
    return false;
});
于 2011-10-25T00:08:16.373 に答える
0

1 つのページ インターフェイスで戻るボタンを適切に機能させる 1 つの方法は、URL でハッシュを使用することです。Twitterはそれを行うサイトです。

ハッシュは、現在のページのアンカーに移動しているだけであることをブラウザに伝えるため、ページはリロードされませんが、URL はブラウザの履歴に追加されます。これは、Javascript で URL を適切に処理し、URL フラグメント (ハッシュの後の部分) に基づいて必要なコンテンツをロードする場合、戻るボタンは引き続き正常に機能することを意味します。

これをアプリケーションに統合する方法について具体的に説明することはできませんが、/my_controller#my_actionの代わりに を使用できる場合は/my_controller/my_action、これを機能させることができるはずです。Javascript は、URL フラグメントに基づく AJAX を使用してページ コンテンツをロードする必要があります。

ここにあなたを助けるかもしれないいくつかのリンクがあります:

于 2011-10-24T15:55:32.933 に答える
0

私が試みることは、グローバル フラグをチェックするイベント ハンドラをリンクに実行させることです。次にchange、アドレスの場合、そのフラグをチェックし、設定されていない場合にのみアクションを実行します。

例えば:

var throughNormalLink = false;

$.address.crawlable(1).state('/').init(function(){
    elemetns.address();
}).change(function(e){
    if(!throughNormalLink)
        $.ajax({type:'GET',url:e.path,dataType:'script',cache:true});
    else // Update: reset the flag
        throughNormalLink = false;
});

$("a").click(function() {throughNormalLink = true; .../* the rest of your code */});
于 2011-10-25T16:20:48.063 に答える