[rails] will_paginate - metodi e proprietà ?

Iniziamo con Remote.Link, è un oggetto di LowPro, si fa carico di
trasformare il tuo tradizionale link in uno che effettua chiamate remote
asincrone (AJAX). Ovviamente utilizzar l’attributo href per sapere dove
indirizzare la request.

Il blocco respond_to è una feature di Rails 2.0, se sei a digiuno, ti
consiglio vivamente di studiarla. Rende il tuo controller in grado di
rispondere ad uno o più mime types.
La prima riga di codice “cattura” le richieste sincrone (non AJAX), e si
occupa di renderizzare il file index.html.erb.
La seconda riga è diversa, cattura le richieste AJAX, esegue quel blocco
passato come argomento e rispedisce il codice javascript che il client
deve eseguire. In questo caso gli diciamo di sostituire il contenuto
dell’elemento che ha come ‘sources’ come id, renderizzando di nuovo il
partial ‘sources’.

Non a caso app/views/sources/index.html.erb:

Sources

<%= render :partial => 'sources' %>

Quindi, ricapitolando, se JavaScript è abilitato, LowPro trasforma i
tuoi link in oggetti che effettuano chiamate AJAX, a cui risponde il
secondo blocco di codice del tuo controller, che si occuperà di
aggiornare il DOM della tua view.
Nel caso contrario (JavaScript disabilitato) i tuoi link avranno un
comportamento tradizionale (chiamate sincrone), quindi passeranno il
numero di pagina come parametro della GET request. In questo caso sarà
format.html ad occuparsi semplicemente di renderizzare la tua view.

Spero d’essere stato chiaro.
Luca

No, sources è presente solo come partial.
Remote.Link è un oggetto di LowPro che wrappa Ajax.Request (Prototype),
accetta due parametri, il primo è un element, il secondo un hash di
options.

Prova
così:Event.addBehavior({
‘div.pagination a:click’ : function(e) {
new Remote.Link(event.element(), {
onLoading: {
// blablabla
}
});
}
});

Non ho testato sto codice, quindi se non funziona, ti consiglio di
studiare il codice di Remote (lowpro.js:255)

Luca

Grazie Luca, gentilissimo anche se non mi è chiara una cosa: sources è
presente sia come partials che come vista?

Inoltre non mi funziona se volessi allegare alla richiesta asincrona i
dati di un form, viene generato un errore in prototype, come se non
trovasse il mio form ma invece esiste, l’ho testato con firebug, bo!

Event.addBehavior({
#add_item’ : Remote.Link({
onLoading: function(){
$(‘dynamic’).update(‘Attendi…’);
}
,onComplete:function(){
$(‘dynamic’).hide().visualEffect(‘BlindDown’);
}
,parameters:Form.serialize($(‘frm_test’))
})
});

se lascio solamente la onLoading e la onComplete invece funziona, non è
che con Remote.Link non è previsto altro che non siano gli stati della
richiesta??

Grazie Luca, in effetti non funziona ma lo sto utilizzando come spunto.

Tornando al codice per veicolare le richieste ajax:

   format.js do
     render :update do |page|
       page.replace_html 'sources', :partial => 'sources'
     end
   end

se volessi elaborare diversi partial, a seconda di un parametro, io ho
fatto così:

  format.js do
      render :update do |page|
        case operazione
        when nil
          page.replace_html 'new1', :partial => 'new1'
        when '2'
          page.replace_html 'new2', :partial => 'new2'
        else
          page.replace_html 'new'+operazione, :partial => 

‘new’+operazione
end
end
end

però non funziona come vorrei, utilizza sempre il partial _new1 anche se
la variabile operazione è valorizzata correttamente, cosa sbaglio??

Ciao Marco,
Quello che ti posso consigliare, lo riassumo in una parola: debug.
Vedi se realmente la variabile operazione è correttamente valorizzata e
prova ad esplicitare ‘return’ alla fine di ogni caso dello switch.

Come mai hai bisogno di questa implementazione? Sicuro che non c’è
qualcosa di più lineare?

Luca

blog: www.lucaguidi.com
Pro-Netics: www.pro-netics.com
Sourcesense - making sense of Open Source: www.sourcesense.com

Ciao Luca, ho risolto col debug. Andava bene quel codice, l’errore era
che non includevo lowpro ed i link non erano ajax, una banalità .
Alla fine ho eliminato il case ed utilizzo solo un istruzione:

format.js do
render :update do |page|
page.replace_html ‘new’[email protected], :partial => ‘new’[email protected]
end
end

non so se sia il metodo migliore: devo aggiornare delle div in base alla
variabile @step. La creazione (new dello scaffold) la faccio fare con
delle scelte in 3 passi ed i tre partial si richiamano a cascata. Usando
il sistema usato per la paginazione riesco ad avere javascript
unobstrusive, lo scopo era questo.

-> new.html.erb -> div new1
(prima scelta che mi aggiorna la div new1 evidenziando cosa ho scelto ed
in base a questo riempie la div new2)
-> new.html.erb -> div new1 -> div new2
(seconda scelta che mi aggiorna la div new2 e mi riempie la div new3)
-> new.html.erb -> div new1 -> div new2 -> div new3
(mostra il form specifico e crea il record il base alle scelte
precedenti)
-> fine

Funziona anche senza ajax perchè controllando la variabile @step
all’interno delle viste includo o meno i partial a cascata.

Se c’è un metodo migliore ben venga!

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs