2013-03-02 22 views
8

sto provando a ridurre la quantità di codice che deve essere riscritta all'interno della mia app, e vorrei chiamare su un set di partials operativi standard.render partial on click

attualmente questo è il metodo che sto usando

chiamando il parziale

%li= link_to 'Delete Event', 'javascript:void(0);', :class => 'alert tiny button', :data => {'reveal-id' => :RevealDelete} 
= render 'layouts/reveal_delete', :item => event_display(@event.event), :resource => @event 

poi nella mia parziale

#RevealDelete.reveal-modal 


%a.close-reveal-modal × 
    %h3= "Delete #{item}" 
    %p Are you sure you want to delete this? 
    =link_to "Delete #{item}", resource, :method => :delete, :remote => :true, :confirm => resource, :class => 'button close-reveal-modal' 
    %a.button.alert.close-reveal-modal Cancel 

come posso avere questo ha qualcosa come link_to 'Elimina' , '#',: partial => 'layouts/delete',: remote =>: true?

in modo che io sono solo di rendering che parziale, quando cliccato e non quando la pagina in realtà carica

risposta

26

Si può fare con javascript come:

<%= link_to "Delete", delete_content_path, :remote => true %> 

L'azione nel controller corrispondente allora sarà questo:

mio controller:

def delete_content 
    respond_to do |format|    
    format.js 
    end   
end 

Quindi è possibile creare il delete_content.js.erb all'interno della vostra directory corretta del collegamento e non si inserisce il seguente codice:

delete_content.js.erb

$('#div_id').html("<%= render :partial => 'my_partial' %>"); 

Quindi secondo lei:

delete_content.html.erb

<div id = "div_id"> 
#this div is html div that will render your partial 

</div> 

Non dimenticare di inserire il numero _my_partial.html.erb parziale nella stessa cartella.

+0

solo per avviso, 'formato.js' userà partial come 'action_method_name.js.erb'. Quindi, nel caso sia necessario eseguire il rendering di 2 partial, è necessario specificare il nome di un altro partial –

+0

im ottenendo questo errore 'variabile locale non definita o metodo' delete_content_path 'per # <# : 0x007fd6972c9320> 'ho bisogno creare un percorso per farlo funzionare? –

+0

aggiunto il percorso, al mio routes.rb sebbene non sembri rendere nulla di rendering: S –

0

sulla vista fare questo:

link_to "Delete #{item}", '/model/confirm_deletion', :method => :delete, :remote => true #add the class and extra attributes if neeeded 

sul controller

def confirm_deletion 
end 

e aggiungere una vista all'azione confirm_deletion in js

#RevealDelete.reveal-modal 
    %a.close-reveal-modal × 
    %h3= "Delete #{item}" 
    %p Are you sure you want to delete this? 
    =link_to "Delete #{item}", resource, :method => :delete, :remote => :true, :confirm => resource, :class => 'button close-reveal-modal' 
    %a.button.alert.close-reveal-modal Cancel 

:javascript 
    $(body).append($('#RevealDelete')); 

che avrebbe fatto una richiesta AJAX per caricare quella finestra di conferma personalizzata, forse si vuole aggiungere un po 'involucro di inserire la finestra di dialogo invece di utilizzare body.append

15

Per aggiungere alla risposta accettato, ho avuto solo a lavorare dopo aver cambiato la porzione js al seguente:

$('#div_id').html("<%= escape_javascript(render :partial => 'my_partial') %>"); 

Senza il escape_javascript era solo il rendering parziale in background e non aggiornare la vista .

+0

sei un vero toccasana! –