5

Come si collega un evento onclick a link_to_function in modo che facendo clic sull'evento si aggiorni un elemento sulla pagina (utilizzando partial)?Collegamento di evento onClick a link_to_function di Rails

Quando l'utente fa clic sul collegamento generato, desidero aggiornare il partial contenente il codice in modo che i venga aggiornato.

def add_step_link(form_builder) 
    logger.info 'ADD_STEP_LINK' 
    link_to_function 'add a step' do |page| 
     form_builder.fields_for :steps, Step.new, :child_index => 'NEW_RECORD' do |f| 
     logger.info 'inserted js' 
     html = render(:partial => 'step', :locals => { :step_form => f, :i=>@i+=1}) 
     page << "$('steps').insert({ bottom: '#{escape_javascript(html)}'.replace(/NEW_RECORD/g, new Date().getTime()) });" 
     end 
    end 
    end 

Ho una parziale in una forma più ampia che contiene solo:

<%= add_step_link(technique_form) %> 

sto tentando di tenere traccia del numero di passaggi in una tecnica. Nel modulo che sto creando, gli utenti possono aggiungere nuovi passaggi a un set di istruzioni. In questo momento, ho campi predefiniti per i passaggi 1-7. Aggiungendo un passaggio, si ottiene il passaggio 8. Il problema è che anche i passaggi successivi sono numerati con "8".

Sto estendendo il tutorial "Modelli figlio multipli in una forma dinamica" in http://railsforum.com/viewtopic.php?id=28447 per i miei scopi.

risposta

5

Ok, sono un po 'confuso da quello che stai facendo, ma cercherò di dare qualche suggerimento.

Piuttosto che utilizzare link_to_function, utilizzare link_to_remote. Collega alle chiamate di funzione javascript, ma quello che vuoi realmente fare è richiamare un controller che esegue alcuni rjs per sostituire il partial parziale o, più probabilmente, aggiungere il nuovo partial (che contiene il passo) alla fine del tuo attuale passi.

Questo è simile a tutti questi esempi avrete visto dove le persone aggiungere un commento alla fine della loro commenti al blog (si aspettano usando link_to_remote piuttosto che remote_form_for) vedi 3/4 del modo attraverso http://media.rubyonrails.org/video/rails_blog_2.mov

Puoi vedere i documenti per link_to_remote qui: http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html

+0

Sono abbastanza sicuro che link_to_remote è quello che ti serve. Si effettua una chiamata remota al server, restituendo HTML (o Javascript) che è possibile inserire nella pagina. –

0

Suggerisco di utilizzare link_to_remote come suggerisce RichH. Il trucco per te sembra essere quello di tenere traccia di @i. Lo inserisco come parametro URL in link_to_remote o nell'oggetto di sessione. Suggerirei la sessione: sembra più facile.

Problemi correlati