Sinatra - 如何从重定向打开引导模式

时间:2017-05-11 07:41:00

标签: ruby twitter-bootstrap modal-dialog sinatra

从POST方法重定向后,如何在layout.erb中自动打开模式?

购物车模式从按钮点击打开:

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

从购物车中删除商品:

<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>

呼叫:

class CartController < ApplicationController

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

1 个答案:

答案 0 :(得分:0)

像@bitsapien所提到的,你可以用ajax触发它 - 这需要你使用javascript / ajax提交表单。我不会在这里进入如何,因为那里已经有大约半数以上的问题/答案可以通过简单的搜索找到。

要触发它,您的Sinatra操作会响应xhr的请求格式。在xhr的请求格式的响应中(如index.html.erb,index.json.erb等),您希望返回$('#my_modal').modal('show');

之类的内容

如果您需要来重定向用户,并且出于某种原因无法使用ajax提交表单,您可以 - 尽管&#34; hacky&#34; - 使用trigger的密钥(示例)和值#my_modal设置Cookie或会话,然后执行类似的操作,

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

它不是最漂亮的,但它确实有效。

相关问题