RJS und Pagination

Hallo Gruppe,

ich experimentiere gerade ein wenig mit IUI und RJS und scheitere
gerade an folgendem. Ich möchte das Ergebnis einer Action beim ersten
Aufruf normal via HTTP holen und rendern, dafür mache ich in der
Action folgendes:

@shipping_pages, @shippings = paginate_by_sql Shipping, sql, 5

respond_to do |format|
format.html
format.js
end

Im .rhtml Template wird jetzt jedes Shipping via Partial auch sauber
gerendet, allerdings soll nach 5 Shippings Schluss sein, und ein
link_to_remote via RJS die nächsten 5 Ergebnisse aus der Pagination
ziehen, und den eigentlichen Link damit ersetzen. Dazu sieht mein Link
im .rhtml so aus:

<%= link_to_remote “Next 5”, :url => { :action => :do_search, :page =>
@shipping_pages.current.next, :kind => params[:kind], :type =>
params[:type] } if @shipping_pages.current.next %>

Und es existiert natürlich ein do_search.rjs, das via insert_html die
zurückgelieferten Daten in dem DOM einbauen soll. Mein Problem ist,
dass ich kein AJAX Snippet sondern immer ein komplettes Layout
zurückbekomme. Scheinbar mache ich hier mit dem Bau von link_to_remote
noch was falsch, oder das Problem liegt im Versuch, hier die
Pagination zu nutzen. Kann mir jemand helfen?

Beste Grüße

Jan Rösner
mail: [email protected]

Jan R. schrieb:

Und es existiert natürlich ein do_search.rjs, das via insert_html die
zurückgelieferten Daten in dem DOM einbauen soll. Mein Problem ist, dass
ich kein AJAX Snippet sondern immer ein komplettes Layout zurückbekomme.

Mit Rails 2.0 brauchst du ein do_search.js.rjs Template.

Jonathan

Hi Jonathan,

Mit Rails 2.0 brauchst du ein do_search.js.rjs Template.

meine App ist auf 1.1.6 festgenagelt. Mich wundert einfach, dass das
Layout mit gerendet wird.

Grüße
Jan Rösner
mail: [email protected]

Es ist auch tatsächlich so, dass bei Klick auf den link_to_remote die
Action zweifach ausgeführt wird. Einmal als wäre es ein normaler http,
einmal als wäre es ein asynchroner Request.
Kann es sein, dass ich einen Denkfehler bei respond_to habe? Ich meine
im Normalfall benutzt man das Konstrukt ja für AJAX Fallback und macht
beim format.html ein redirect. Ich will aber die selbe Action einmal
direkt mit einem .rhtml Template, einmal mit einem .rjs Template
rendern. Liegt eventuell da das Problem?

Grüße
Jan Rösner
mail: [email protected]

Jan R. schrieb:

Hi Jonathan,

Mit Rails 2.0 brauchst du ein do_search.js.rjs Template.

meine App ist auf 1.1.6 festgenagelt.

Hatte 1.1.6 überhaupt schon respond_to? Dachte, das wäre erst mit 1.2
passiert…Egal.

Mich wundert einfach, dass das
Layout mit gerendet wird.

link_to_remote sollte standardmäßig nach JS verlangen. Bekommst du
JavaScript im Layout oder HTML im Layout.

Das :type in der URL irritiert mich. Falls du explizit nach HTML fragst,
bekommst du natürlich das komplette Paket, woher soll den Rails wissen,
dass du es jetzt ohne Layout haben willst?

Normalerweise fragt man JS an und das JS injiziert den partial. Oder man
macht ein Ajax.Update und hat aber im Controller ein explizites :layout
=> false.

Also entweder nach JS fragen oder einen extra Parameter angeben, den du
im Controller abfragen kannst und dann ohne Layout renderst.

Jonathan

On Fri, Dec 14, 2007 at 12:14:16AM +0100, Jan R. wrote:

das auch kein Layout mitzieht.

Mein Problem ist, dass der Call von link_to_remote eben do_search
jetzt komischerweise zweifach ausführt, einmal das .rhtml und einmal
das .rjs Template rendert.

Falls tatsächlich 2 Requests von Browser ausgehen (Ist das so?), klingt
das als ob im onclick handler des Links das ‘return false’ am Ende
fehlen würde. Wie sieht denn der fertig gerenderte Link aus?

Jens


Jens Krämer
http://www.jkraemer.net/ - Blog
http://www.omdb.org/ - The new free film database

Hallo Jens,

Falls tatsächlich 2 Requests von Browser ausgehen (Ist das so?),
klingt
das als ob im onclick handler des Links das ‘return false’ am Ende
fehlen würde. Wie sieht denn der fertig gerenderte Link aus?

Es gehen zwei Requests ab, ich habe jetzt schon die Vermutung, dass
hier das uiu.js noch ne Rolle spielt, weil ich zwangsweise an dessen
Funktionalität vorbeispielen muss, bin mir aber noch nicht sicher.
Der Link sieht so aus :

Next 5 …

Und es gehen tatsächlich zwei Requests ab, einer via GET, einer via
POST, obwohl nur der POST Request abgehen sollte.

Grüße
Jan Rösner
mail: [email protected]

Next 5 …

Und es gehen tatsächlich zwei Requests ab, einer via GET, einer via
POST, obwohl nur der POST Request abgehen sollte.

Dieser Code sollte nur einen Ajax POST absetzten. Bist du sicher, dass
der erste Request nicht einfach der HTTP-GET Pageload ist?

Was sagt Firebug?

Jonathan

Hi Jonathan,

Das :type in der URL irritiert mich. Falls du explizit nach HTML
fragst, bekommst du natürlich das komplette Paket, woher soll den
Rails wissen, dass du es jetzt ohne Layout haben willst?

:type und :kind sind nur Parameter die ich hier von Hand mitschleife.

Normalerweise fragt man JS an und das JS injiziert den partial. Oder
man macht ein Ajax.Update und hat aber im Controller ein
explizites :layout => false.

Das ist klar soweit. Tue ich ja auch. Initial rufe ich ich Action
do_search von einem anderen Ort auf, von welchem ich Suchparameter
(:type, :kind) mitgebe. In dem Fall ist das ein normaler HTTP-Request.
Neben den Suchergebnissen wird unten dann aber eben der link_to_remote
mitgebracht, der aber dieselbe Action aufruft, diesmal aber eigentlich
aufgrund des asynchronen Requests nur das rjs Template rendern sollte,
das auch kein Layout mitzieht.

Mein Problem ist, dass der Call von link_to_remote eben do_search
jetzt komischerweise zweifach ausführt, einmal das .rhtml und einmal
das .rjs Template rendert.

Grüße
Jan Rösner
mail: [email protected]

Hallo Jonathan,

Was sagt Firebug?

… dass ich wohl gegen die Wand renne. Der GET Request kommt
tatsächlich vom IUI.js. Der versucht selber die eigene “Pagination”
durchzuziehen, was mir allerdings nichts nutzt, weil ich mit der
reinen IUI Funktionalität nicht das tun kann, was ich eigentlich tun
will. Problem ist also zumindest erstmal erkannt. Statt die nächsten 5
Ergebnisse einfach in dem DOM einzubauen fragt das IUI.js auch nochmal
die ersten 5 ab und baut dann alle zusammen in den DOM ein. Warum, ist
mir im Augenblick noch unklar, dieser Request ist dann aber definitv
der GET Request, welcher in meinem Fall dann eben das .rhtml Template
rendert … ärgerlich, weil ich IUI damit nicht wirklich nutzen kann.

Trotzdem Danke für Eure Hinweise.

Grüße
Jan Rösner
mail: [email protected]

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