我正在工作的弹出模式框提交表单。如果存在验证问题,表单应该刷新,但仍然在模态框内。这适用于添加新记录,我认为这是调用:create动作,POST。我想使用相同的模态框来编辑记录。到目前为止,我可以让它在模态框打开,但只要有错误,它重定向到另一个页面,而不是留在框内。我认为ajax没有调用动作来返回javascript将表单放回模态框内。我如何让ajax返回javascript回模态框来纠正表单?
示例,下面是我的:create action:
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.js { render :redirect } #this is for modalform
format.html { redirect_to(users_url, :notice => 'User was successfully created.') }
else
format.html {render :new}
format.js # this renders the create.js.erb file to keep the form inside
end
end
end
下面是加载模态框并保持表单直到验证正确的javascript代码:
document.observe('dom:loaded', function() {
$('newuser-link').observe('click', function(event) {
event.stop();
Modalbox.show(this.href,
{title: 'Create',
width: 500, #up to this point, this opens the form in the modal box
afterLoad: function() { # this afterload part is supposed to keep the form inside the modal box
$('new_user').observe('submit', function(event) {
event.stop();
this.request();
})
}}
);
});
})
这里是。js。如果存在验证错误,则:create操作调用的动词文件
$('MB_content').update("<%= escape_javascript(render :partial => 'form') %>");
Modalbox.resizeToContent();
$('new_users').observe('submit', function(event) {
event.stop();
this.request();
});
由于这适用于:create操作,我如何使它的工作为:update操作,当我想编辑一个记录?同样,主要问题是当存在验证错误时,它会在模态框外重定向。
:
我发现在javascript中应该保持模态框打开的部分:
$('new_user').observe('submit', function(event) {
event.stop();
this.request();
说明'new_user'是表单的id。当使用它来编辑记录时,表单的id是edit_user_1或edit_user_32或任何正在编辑的用户。所以我猜这里的解决方案,我不能弄清楚,是如何使用一个类在javascript作为一个选择器,而不是id。因为当我手动输入'edit_user_1'并且我正在编辑id为1的用户时,它工作了…但显然不适合其他用户。
不是使用ModalBox,而是使用FaceBox(教程在这里):
http://net.tutsplus.com/tutorials/ruby/how-to-build-an-unobtrusive-login-system-in-rails/几乎相同,但在为选择器添加类或id方面似乎更灵活。另外,对于rails生成的动态id,我使用了一点jQuery创建了一个变量来获取动态链接并将其传递给选择器:
var myid = jQuery('#userform').children().attr('id');
然后,当它请求表单的id时,我传入
'#' + myid
无论如何,我通过上面的教程得到了这个工作,甚至能够修改它来添加一个新用户和编辑一个。