Wie gehen Sie mit dem Flash von Rail mit Ajax-Anfragen um?
Ich bin ziemlich glücklich mit die Lösungdie ich kam mit. Im Grunde genommen habe ich eine helper-Methode, lädt den flash-inline, und dann habe ich eine after_filter, dass klar aus dem flash, wenn die Anforderung xhr. Hat jemand eine einfachere Lösung als das?
Update: Die Lösung oben wurde geschrieben zurück in den Schienen 1.x und wird nicht mehr unterstützt.
InformationsquelleAutor der Frage Jerry Cheung | 2008-12-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie auch speichern Sie die flash-Nachrichten, die in den response-Header mit einer after_filter block und anzeigen mit javascript:
Und in application.js fügen Sie eine Globale ajax-handler. Für jquery tun so etwas wie dieses:
Ersetzen alert() mit Ihrer eigenen javascript-flash-Funktion, oder versuchen Sie jGrowl.
InformationsquelleAutor der Antwort gudleik
Und hier ist meine version basiert auf dem @emzero, mit Modifikationen für die Arbeit mit jQuery, getestet auf Rails 3.2
application_controller.rb
application.js
layout: Anwendung.html-Code.haml
InformationsquelleAutor der Antwort Victor S
Dies ist nötig, in die js-Antwort
Wenn Sie RSJ:
Wenn Sie mit jQuery:
InformationsquelleAutor der Antwort Silviu Postavaru
Habe ich es auf diese Weise..
controller:
anzeigen:
layouts/_flash.html-Code.erb
post.js.erb
InformationsquelleAutor der Antwort dbKooper
Gebäude auf der Oberseite des anderen -
(Passieren wir die komplette flash-Objekt als JSON, das es uns ermöglicht, zu rekonstruieren, die komplette flash-Objekt im browser. Dies kann verwendet werden, um sicherzustellen, dass alle flash-Mitteilungen werden angezeigt, wenn mehrere flash-Nachrichten werden generiert von Schienen.)
InformationsquelleAutor der Antwort Vikrant Chaudhary
Sieht aus wie das, was Sie brauchen, ist
flash.now[:notice]
die nur in der aktuellen Aktion und nicht in der nächsten. Werfen Sie einen Blick in die Dokumentation, hier: http://api.rubyonrails.com/classes/ActionController/Flash/FlashHash.html#M000327InformationsquelleAutor der Antwort nakajima
Ordnen Sie die Nachricht in der Steuerung wie diese:
app/views/layouts/application.js.erb - Layout für Ajax-Anfragen.
Hier können Sie einfach
oder einige andere reiche Animationen mit gritter: http://boedesign.com/demos/gritter/
InformationsquelleAutor der Antwort Arun Kumar Arjunan
Basierend auf gudleik Antwort:
Dann auf Ihre application.js (wenn Sie die Schienen native Prototyp Helfer) hinzufügen:
InformationsquelleAutor der Antwort emzero
Es ist ein Juwel namens Unobtrusive Flashdas automatisch codiert-flash-Nachrichten in einem cookie. Ein javascript am client-Ende-Prüfungen, die für flash und zeigt es in welcher Weise auch immer Sie wollen. Diese arbeitet nahtlos sowohl im normalen als auch ajax-Anfragen.
InformationsquelleAutor der Antwort lulalala
Ich geändert Victor' S Antwort auf fix einige Fälle, in denen
flash[type].blank?
hat nicht funktioniert, wie bereits von einigen Leuten in den Kommentaren.Dann der rest ist die gleiche
InformationsquelleAutor der Antwort Ricky Gu
Hier ist meine version (die Arbeit mit Multiplikatoren flash-Mitteilungen und spezielle Zeichen, die UTF-8-Codierung):
Innen ApplicationController:
In meinem Kaffee-Skript (twitter bootstrap version):
InformationsquelleAutor der Antwort Luc Boissaye
Andere Weg wäre, die update/display das "Achtung" - div mit der Meldung aus, die Ihre Ajax-requests "OnFailure" - handler. Es gibt Ihnen die Fähigkeit zu zeigen, diese flash-Nachrichten mit gewünschten Effekt. Ich habe dieses
in der Javascript -
HTH
InformationsquelleAutor der Antwort Rishav Rastogi
Baue ich einen Motor, das umfasst das Verhalten der application_controller senden Sie die flash-message im response-header als einige von Euch vorschlagen.
https://github.com/bonzofenix/flajax
InformationsquelleAutor der Antwort bonzofenix
Die einzige Verbesserung, die ich mir vorstellen kann ist dass die Seite.reload_flash Standard (nicht dass es auf jeden rjs-Datei, und stellen Sie es ausdrücklichen, wenn Sie nicht wollen, um neu zu laden, den Blitz etwas wie Seite.keep_flash.
Ich würde nicht wissen, wo zu beginnen, aber zu wissen, einige Schienen ich bin sicher, es ist nicht schwer.
InformationsquelleAutor der Antwort
In Fall, dass Sie wollen, verwenden Sie AJAX-Aufrufe redirect_to sollte nicht verwendet werden, die in den controller. Eher, flash-Mitteilung sollte ausdrücklich bezeichnet:
In your_controller:
In der Ansicht, dass die Namen durch your_ajax_method_in_the_controller
your_ajax_method_in_the_controller.js.haml
Bitte beachtet, dass die Nachrichten Klasse ist ein Ankerpunkt für die Darstellung von Nachrichten. Diese Klasse sollte vorhanden sein, in der Sie Ihre Ansicht oder Anwendung layout. Wenn Sie ERB wird die Zeile
$('.messages').html("<%= j(render 'layouts/messages') %>");
Den oben genannten JavaScript-eingebettet in HAML/ERB ist der Schlüssel, um die Anzeige von flash-Mitteilungen bei der Verwendung von AJAX. Alle anderen Komponenten bleiben die gleichen für nicht-AJAX-Aufrufe.
Können Sie verwenden
your_ajax_method_in_the_controller.js.coffee
oder einfach .js aber dann die Schienen Variablen nicht verfügbar sein, um JS/Kaffee. Auch wenn ich keine Variablen verwenden, hier habe ich lieber wrap-JS in HAML zu halten einheitliche Codebasis.Ich nutzen Twitter Bootstrap für styling-Nachrichten, so
$(".alert").alert('close')
verblasst die Kündigung. Und hier ist die Nachrichten teilweise:layouts/_messages.html-Code.haml
Nur für den Fall, CSS für die Warnungen ist unten
InformationsquelleAutor der Antwort Vadym Tyemirov