我在Rails 3应用程序中遇到了一个bootstrap模式的问题。它目前处理一个审核表单,提交和更新数据库就好了,但提交表单时模式不会关闭。我已经尝试将其添加到表单提交按钮:
:data => {:dismiss => "modal"}
但它会在不执行更新操作的情况下关闭模态。这是我的模态代码:
<!-- Review Modal -->
<% if current_user == nil %>
<% else %>
<div id="reviewModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="reviewModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="reviewModalLabel">Write a review</h3>
</div>
<div class="modal-body">
<%= form_for(review_ballot, :remote => true, :html => {:class => 'review_ballot'}) do |f| %>
<h4>Your score:</h4>
<%= f.label("score_1", content_tag(:span, '1'), {:class=>"review", :id=>"1"}) %>
<%= radio_button_tag("review[score]", 1, current_user_review == 1, :class => 'review_button')%>
<%= f.label("score_2", content_tag(:span, '2'), {:class=>"review", :id=>"2"}) %>
<%= radio_button_tag("review[score]", 2, current_user_review == 2, :class => 'review_button')%>
<%= f.label("score_3", content_tag(:span, '3'), {:class=>"review", :id=>"3"}) %>
<%= radio_button_tag("review[score]", 3, current_user_review == 3, :class => 'review_button')%>
<%= f.label("score_4", content_tag(:span, '4'), {:class=>"review", :id=>"4"}) %>
<%= radio_button_tag("review[score]", 4, current_user_review == 4, :class => 'review_button')%>
<%= f.label("score_5", content_tag(:span, '5'), {:class=>"review", :id=>"5"}) %>
<%= radio_button_tag("review[score]", 5, current_user_review == 5, :class => 'review_button')%>
<br />
<h4>What'd you think?</h4>
<%= f.text_area :review_text, :rows => 3, :cols => 10 %>
<%= hidden_field_tag :venue_id, @venue.id %>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<%= submit_tag "Save review", :class => "btn btn-warning" %>
<% end %>
</div>
</div>
这是review_ballot方法的场地助手
module VenuesHelper
def review_ballot
if @review = current_user.reviews.find_by_venue_id(params[:id])
@review
else
current_user.reviews.new
end
end
def current_user_review
if @review = current_user.reviews.find_by_venue_id(params[:id])
@review.score
else
"N/A"
end
end
end
我现在不知所措。我用Google搜索过,没有运气。我该如何解决这个问题?
编辑:我的临时解决方案 - 我已从模式中删除:remote => true
并在控制器操作中重定向访问者,所以现在我不必担心它被解雇了。
这显然是笨重/骇客,所以如果有人可以帮我解决这个问题,我仍然会喜欢它。愿意按需提供更多代码/信息。
答案 0 :(得分:2)
在您的情况下,我的意思是您没有上传任何图像。所以你可以简单地去ajax调用提交。这是一个简单的代码
$(document).ready(function(){
$('#submit_button_id').click(function() {
var valuesToSubmit = $("#form_id").serialize();
$("#modal_id").modal('hide') ;
$.ajax({
url: "/controller/method",
data: valuesToSubmit,
type: "POST/GET/PUT"
}).success(function(data, status){
$("#id_if_div_where_you_want_to_show_updated_data").html( data );
});
return false;
});
});
<强>被修改强>
控制器方法如下所示
def method
Do what you want to do
@object = Model.some_queries
render :template => "path_to_view_file like controller_name/method_name", :layout => false
end
答案 1 :(得分:0)
我通过将提交绑定到hidden.bs.modal
事件来解决此问题:
$('#modal_id').on('hidden.bs.modal', function() {
$('form').submit();
form_submitted = false;
});
要阻止表单在按钮单击时提交,您可以在表单的onclick事件中使用return false;
:
<%= submit_tag 'Save review',
class: 'btn btn-warning',
:data => { :dismiss => 'modal' },
:onclick => "form_submitted = true; return false;" %>
修改强>
为onclick事件添加了form_submitted = true
,因此您知道模式在提交时关闭,而不是任何其他退出条件。调用$('form').submit()
后重置为false。将此变量添加到您的javascript文件中,最初为false。