it-swarm.com.de

Rails Flash-Benachrichtigung über Ajax

Lange Rede kurzer Sinn, ich habe einen Knopf. Wenn ich darauf klicke, möchte ich, dass eine Ajax-Anfrage ausgelöst wird, die blinkt [: notice] und sie in einem Div in $ anzeigt

Hier ist meine verkürzte Ansicht:

 <input type="button" id="search" value="display"/>

 <div id="notice">

 </div>

Meine Ajax-Anfrage in der Ansicht:

$("#search").submit(function(){
                            $.ajax({
                                type: "POST",
                                url: //url to my show action
                                success: function(data){
                                      /*$("#notice").html("<%= flash[:notice] %>");
                                        $("#content").html(data);*/
                                }
                            });
                            return false;
                    });

Mein Controller:

def HomeController <  ActionController::Base
  def index

  end

  def show
    respond_to do |format|
    format.js {  flash[:notice] = "" + count.to_s + " results found for " + params[:query][:search_key] + "" }
    end
    #render :partial => 'search'
  end
end

Meine show.js.erb

#app/views/dashboard_home/show.js.erb
$("#notice").html("<%=j flash[:notice] %>");

$("#content").html("<%=j render partial: "search" %>");

Das Problem ist, wenn ich auf die Schaltfläche klicke, wird der Hinweis gut angezeigt. Der gleiche Hinweis bleibt jedoch auch bei den nächsten Klicks bestehen. Der Suchteil enthält die Tabelle. Bitte helfen Sie!

Hier ist ein Beispiel, an dem ich dank Rich Pecks Antwort gearbeitet habe. Ich musste flash.now Verwenden, um sicherzustellen, dass der Flash-Hinweis nicht dauerhaft war.

AJAX-Trigger in der Ansicht:

<%= link_to "Email report", users_path, remote: true %>

Regler:

# app/controllers/users_controller
class UsersController < ApplicationController

  def index
    # do some things here

    respond_to do |format|
      format.js { flash.now[:notice] = "Here is my flash notice" }
    end
  end
end

Gerenderte Ansicht:

# app/views/users/index.js.erb
$("#flash").html('<%= j render partial: "shared/notice_banner" %>');

wo der Flash-Hinweis im Layout angezeigt wird:

# app/views/layouts/application.html.erb
<div id="flash">
  <% if notice.present? %>
    <%= render partial: "shared/notice_banner" %>
  <% end %>
</div>


# app/views/shared/_notice_banner.html.erb
<div data-alert class="alert-box">
  <%= notice %>
  <a href="#" class="close">&times;</a>
</div>
24
littleforest