2013-03-08 13 views
29

Ho il seguente:rotaie link_to: remoto

<%= 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 %> 

che porta una Bootstrap modale per conferma, e ho voluto agganciare la chiamata ajax che modo che possa visualizzare uno spinner o qualche tipo di testo .

So che posso usare javascript discreto per ascoltare l'evento click in questo modo, se non lo faccio uso ': a distanza => true' nel mio 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 

ma non sapete come combinare i due quando si utilizza ': remote => true'

Qualche suggerimento?

grazie per l'aiuto

+0

Questo potrebbe essere quello che stai cercando: github.com/rails/ jquery-ujs/wiki/ajax – michaelrshannon

risposta

62

È possibile associare alle chiamate Ajax come questo:

<%= 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

sto provando a fare la stessa cosa ... ma in qualche modo 'ajax: complete' non viene licenziato. Solo' beforeSend' funziona.Iam utilizza GET nel mio caso. –

+0

@RahulDess Il tuo server genera una risposta? L'unica ragione per cui posso immaginare che il callback completo non si attivi, è che le richieste non vengono mai completate. – Arjan

+1

richieste completate con esito positivo .. ma il punto rilevante è che eseguo il rendering parziale tramite javascrpipt nel mio controller. Il thtat cambia qualcosa? –

10

Non è necessario combinare le due cose. Basta usare il file format.js per chiamare il javascript.

nel 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-delete "). html (" <% = escape_javascript (render (: partial => "text_message"))%> ");' può essere abbreviato in '$ (" # link-delete "). html (" <% = j render "text_message")% > ");' – Arjan

+1

wow, non lo sapevo mai. È carino. Ma come farà a sapere che stai rendendo un testo parziale o solo un semplice? Non hai definito parziali nel rendering. –

+0

Certo, lo sapevo, ma dopo la richiesta di ajax viene eseguita. Vorrei mostrare un messaggio 'Caricamento in corso ...' prima che venga chiamata la chiamata ajax. – cgiacomi