2017-05-11 6 views
1

Wie würde ich gehen über automatisch ein Modal in der layout.erb öffnen, nachdem ich von einer POST-Methode zurückleiten?Sinatra - So öffnen Sie ein Bootstrap-Modal von einer Weiterleitung

Wagen modal öffnet sich von Button-Klick:

<span class="btn btn-success" data-toggle="modal" data-target="#cart"> 

einen Artikel aus dem Warenkorb entfernen:

<form method="post" action="/cart/remove-product"> 
    <input type="hidden" name="id" value="<%= item[:product_id] %>"> 
    <input type="hidden" name="item_count" value="<%= item[:count] %>" 
    <input class="btn btn-danger btn-sm" type="submit" value="x"> 
</form> 

Anrufe:

class CartController < ApplicationController 

post '/remove-product' do 
    remove_product_from_cart(request.cookies['cart_id'], params[:id], params[:item_count]) 
    redirect back 
+0

Sie können das mit AJAX auslösen. – bitsapien

Antwort

0

Wie @bitsapien angedeutet, können Sie auslösen Es mit Ajax - was erfordern würde, dass Sie das Formular mit Javascript/Ajax senden. Ich werde nicht in wie hier gehen, denn es gibt etwa eine halbe Zillion + Fragen/Antworten da draußen, die mit einer einfachen Suche gefunden werden können.

Um es auszulösen, würde Ihre Sinatra-Aktion jedoch auf ein Anfrageformat von xhr reagieren. Innerhalb der Antwort (wie index.html.erb, index.json.erb, etc.) für das Anforderungsformat von xhr würden Sie so etwas wie $('#my_modal').modal('show');

zurückkehren möchten Wenn Sie Notwendigkeit den Benutzer zu umleiten und für aus irgendeinem Grund kann das Formular mit ajax nicht einreichen, könnte man - wenn auch „hacky“ - wird ein Cookie gesetzt oder Sitzung mit einem Schlüssel (Beispiel) von trigger und einem Wert von #my_modal, und dann etwas tun, wie,

<% if session[:trigger] %> 
<script><%= "$('#{session[:trigger]}').modal('show');" %></script> 
<% session.delete(:trigger) %> 
<% end %> 

Es ist nicht das schönste, aber es funktioniert.

Verwandte Themen