2011-07-26 113 views
0

我試圖將超鏈接變成ajax鏈接。這樣,我可以在更新模型數據時鏈接到外部目標,而無需將用戶發送到自定義控制器操作來處理帖子/重定向。Rails 3/Ajax - 將link_to變成jquery鏈接

我的應用程序是一個基本的圖片庫,每一個圖像鏈接到外部網站:

這裏是我的部分_pictures.html.erb:

<% @galleries.each do |g| %> 
    <% for image in g.images %> 
    <div id="picture"> 
     <%= render 'top_nav'%> 

     <%= link_to g.source, :target => true do %> 
     <%= image_tag image.file_url(:preview) %> 
     <% end %> 

     <%= will_paginate(@galleries, :next_label => "Forward", :previous_label => "Previous") %> 
    </div> 

    <br /> 

    <div class="image_description"> 
     <h2> 
     <%= g.title %>, 
     <span class="time"> 
     <%= distance_of_time_in_words(g.created_at, Time.now, include_seconds = false)%> ago 
     </span> 
     </h2> 
    </div>  
    <% end %> 
<% end %> 

這是對我的index.html.erb呈現:

<h1>Share and click images to unlock more...</h1> 

<div id="galleries"> 
<%= render 'pictures' %> 
</div> 

我相信我已經能夠改變鏈接到與application.js中後續的AJAX鏈接:

$(function() { 
    $("#picture a").live("click", function() { 

    return false; 
    }); 
}); 

由於link_to不起作用(我預期)。現在,我試圖寫的處理程序(不知道這是正確的詞)在index.js.erb的,我知道這是錯誤的方式,但我所拼湊起來就是:

$("#picture").html.("<%= escape_javascript(render)("pictures")) %>") 

如何讓這個鏈接返回工作,但通過JavaScript?如果我想對模型方法進行ajax調用,那麼我會在哪裏開始編寫代碼,在application.js或index.js.erb中?

強制性防禦機制:我吸食javascript。

回答

0
$(function() { 
    $("#picture a").live("click", function(event) { 
     event.preventDefault(); // prevent the click from linking anywhere 

     $.ajax({ 
      url:'/my_ajax_file.erb', 
      dataType:'html', 
      data: $(this).attr('id'), // send whatever here... 
      type: 'post', 
      success:function(data){ 
       $('#picture').html(data); 
      } 
     }); 

    }); 
}); 
0

嘗試$("#picture").html("<%= escape_javascript(render("pictures")) %>");

但如果你使用的原型和jQuery變化$的jQuery.noConflict()

$(function() { 
     $("#picture a").live("click", function() { 
      $.getScript(this.href); 
      return false; 
     }); 
    }); 
+0

感謝您的幫助(大家)。與此工作,我似乎有成功的Ajax鏈接,因爲我的分頁鏈接不再改變URL並正在工作。外部鏈接雖然什麼都不做,有什麼想法? – Kombo

+0

我需要看你的新代碼。 – Norm212

0

不要忘了在你的控制器是這樣的:

respond_to do |format| 
    format.html do 
     redirect_to #whatever you normally redirect to for html 
    end 
    format.js do 
     render :json => some_json_thing #this will get passed back as the data element in the ajax callback above 
    end 
end