2013-03-02 18 views
8

Ich versuche, die Menge an Code zu reduzieren, der in meiner App neu geschrieben werden muss, und möchte auf einer Reihe von standardmäßigen operativen Teiltönen aufrufen.render teilweise auf Klick

derzeit ist dies die Methode i

bin mit dem Teil

%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 

ruft dann in meinem Teil

#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 

Wie kann ich dies hat so etwas wie link_to 'Löschen' , '#',: partially => 'Layouts/löschen',: remote =>: true?

, so dass ich nur, dass Teil-Rendering bin, wenn darauf geklickt und nicht, wenn die Seite lädt tatsächlich

Antwort

26

Sie tun können, die die Gemeinschaft mit Javascript wie:

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

Die Aktion in Ihrem entsprechenden Regler wird dann sein:

Mein Controller:

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

Dann können Sie die delete_content.js.erb in Ihrem richtigen Verzeichnis der Verknüpfung erstellen und dort Sie den folgenden Code setzen:

delete_content.js.erb

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

Dann Ihrer Ansicht nach:

delete_content.html.erb

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

</div> 

Vergessen Sie nicht, Ihre teilweise _my_partial.html.erb in den gleichen Ordner zu legen.

+0

nur für die Ankündigung, 'Format.js' wird partiell wie 'action_method_name.js.erb' verwendet. Wenn Sie also 2 Teiltöne rendern müssen, müssen Sie den Namen eines anderen Teilzeichens angeben –

+0

ich bekomme diesen Fehler 'undefinierte lokale Variable oder Methode' delete_content_path 'für # <# : 0x007fd6972c9320> 'brauche ich eine Route erstellen, damit dies funktioniert? –

+0

hinzugefügt die Route, zu meinem routes.rb obwohl es scheint nichts zu rendern: S –

0

auf der Ansicht, dies zu tun:

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

auf dem Controller

def confirm_deletion 
end 

und füge eine Ansicht der Aktion 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')); 

, die ein Ajax-Request machen würde, dass benutzerdefinierte Bestätigungsdialog zu laden, vielleicht möchten Sie einige Wrapper hinzufügen, um den Dialog statt mit body.append

15

auf die akzeptierte Antwort hinzuzufügen, habe ich es erst nach Änderung des js Teil der folgenden arbeiten:

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

Ohne die escape_javascript es nur die teilweise in den Hintergrund-Rendering wurde und die Ansicht nicht aktualisiert .

+0

Sie sind ein Lebensretter! –

Verwandte Themen