2013-03-08 4 views
29

Ich habe folgend:Schienen link_to: Fern

<%= link_to my_path, method: :delete, confirm: 'Delete?', class: 'link-delete', 'data-message' => 'Are you sure?', 'data-severity' => 'danger', :remote => true do %> 
    <i class="icon-trash"></i> 
<% end %> 

, die eine Bootstrap Modal zur Bestätigung bringt, und ich wollte auf den Ajax-Aufruf an Haken, so dass ich einen Spinner oder irgendeine Art von Text anzeigen kann .

Ich weiß, dass ich unaufdringliche Javascript verwenden kann, wie so zu dem Click-Ereignisse zu hören, wenn ich nicht verwenden ‚: remote => true‘ in meinem link_to

jQuery -> 
    $('.link-delete').live 'click', (event) -> 
    $('.link-delete').html("Loading...") #THE MSG OR ANIMATION I WANT TO DISPLAY 
    $.get(this.href, null, null, 'script') 
    false 

aber nicht sicher, wie zu kombinieren die beiden bei der Verwendung von ': remote => true'

Irgendwelche Vorschläge?

Dank für die Hilfe

+0

Dies könnte das sein, was Sie suchen: github.com/rails/ jquery-ujs/wiki/ajax – michaelrshannon

Antwort

62

Sie auf Ajax-Aufrufe wie diese binden können:

<%= link_to my_path, method: :delete, confirm: 'Delete?', class: 'link-delete', 'data-message' => 'Are you sure?', 'data-severity' => 'danger', :remote => true do %> 
    <i class="icon-trash"></i> 
<% end %> 

$('.link-delete').bind('ajax:beforeSend', function() { 
    $('#mySpinner').show(); 
}); 

$('.link-delete').bind('ajax:complete', function() { 
    $('#mySpinner').hide(); 
}); 
+0

Ich versuche, das Gleiche zu tun ..aber irgendwie 'ajax: complete' wird nicht gefeuert. Nur' beforeSend' funktioniert.Ich benutze GET in meinem Fall. –

+0

@RahulDess Generiert der Server eine Antwort? Der einzige Grund, warum ich mir vorstellen kann, dass der vollständige Rückruf nicht ausgelöst wird, ist, dass die Anfragen niemals abgeschlossen werden. – Arjan

+1

Anfragen erfolgreich abgeschlossen .. aber bemerkenswerter Punkt ist, dass ich teilweise durch javascrpip in meinem Controller rendern. Ändert das etwas? –

10

Sie brauchen nicht, die beiden zu kombinieren. Verwenden Sie einfach die format.js, um das Javascript aufzurufen.

In Ihrem Controller:

-Controller

def my_method 
    #code here 
    respond_to do |format| 
     format.js {} 
    end 
    end 

my_method.html.erb

<div id = "link-delete"></div> 

my_method.js.erb

$("#link-delete").html("<%= escape_javascript(render(:partial => "text_message"))%>"); 

_text_message.html.erb

<p>Loading...</p> 
+7

'$ (" # link-löschen ") .html (" <% = escape_javascript (render (: partially => "text_message"))%> ");' kann auf verkürzt werden '$ (" # link-delete ") .html (" <% = j render "text_message")% > ");' – Arjan

+1

Wow, ich wusste nie darüber. Es ist schön. Aber wie wird es wissen, dass Sie einen partiellen oder nur einen einfachen Text wiedergeben? Sie haben in Ihrem Rendering nicht partiell definiert. –

+0

Sicher, das wusste ich, aber das ist, nachdem die Ajax-Anfrage durchgeführt wurde. Ich möchte eine "Loading ..." Nachricht anzeigen, bevor der Ajax-Anruf aufgerufen wird. – cgiacomi