2011-03-11 45 views
2

我正在嘗試使整個div標記可點擊。我想使用的代碼如下,當我加入:remote => true與url_for,如何做到這一點?

:remote => true 

位,它拋出參數過多錯誤,2 1

代碼:

<div id="foo" onclick="window.location = '<%= url_for foo_controller_path(:someparam => @left), :remote => true %>'"></div> 

回答

4

url_for沒有按」 t接受:remote => true參數,通常是您要發送給它的link_to方法。

是否有一個原因,你不能讓你的<div>鏈接呢?對於所有意圖和目的而言,它都起着鏈接的作用,所以您應該將其標記爲這樣,我們稱之爲語義標記。

如果你真的想這樣做,最好使用jquery(或原型,如果這是你的一杯茶)不加引人注意地執行操作......它也使得更容易執行ajax請求。點擊鏈接後,您是否嘗試更新頁面上的內容?或者什麼都不做?

此外,'window.location'是告訴頁面上的JavaScript重定向。如果您想遠程發出請求,則不會使用它。

使用jQuery你可能像這樣做,如果你想堅持一個div

%(function(){ 
    $('#foo').click(function(){ 
    $.get(
     url: $(this).data('request-path'), 
     success: function(data){ 
     alert('success sir! controller responded with ' + data); 
     } 
    ); 
    }); 
}); 

並在您的視圖中使用這樣的:

<div id='foo' data-request-path='<%= url_for foo_controller_path(:someparam => @left) %>'></div> 

但如果你把它改爲鏈接標籤,你可以這樣做,而不是...

= link_to("", url_for(foo_controller_path(:someparam => @left)), :remote => true, :id => 'foo') 

它應該只是工作。然後,您可以按照您嘗試設置div標籤樣式的方式對此鏈接進行樣式設置。

這是更多的語義和更少的代碼讓你擔心。如果您需要更新DOM中的東西之後,你可以添加這個jQuery(如果你使用jQuery和Rails3中):

$('#foo').bind('ajax:success', function(data){ 
    alert('successful request! data was: ' + data); 
}); 

我不一定測試此所有但它應該是一個很好的起點......我不喜歡把onclick處理程序放入標籤中。當你使用jQuery綁定事件時,它傾向於更好地工作。

如果你希望能夠做我描述過什麼,但你在梁2的時候,你可以從這裏得到的Rails3中jQuery腳本:https://github.com/rails/jquery-ujs

請注意,您還需要這個腳本,如果你正在使用rails 3,並希望jquery而不是原型(像我一樣!)。默認情況下,Rails 3.1將捆綁jQuery而不是我聽到的原型。

並將該url_for中的:remote => true更改爲"data-remote" => true(對於導軌2,使用導軌3可以使用符號語法併爲您設置'data-remote'屬性。

讓我知道,如果有什麼不工作,或者你需要澄清。或者即使你一直恨我的想法:p

+0

這樣做的竅門,我會用你推薦的jQuery使用UJS。不幸的是,我必須使div可點擊,因爲它實際上不包含除使用javascript繪製的矢量圖像以外的其他任何內容。 – providence 2011-03-11 04:59:44