gpt4 book ai didi

javascript - Rails 如何通过 :update controller action 中的 Ajax 调用返回 javascript

转载 作者:行者123 更新时间:2023-11-29 15:50:46 25 4
gpt4 key购买 nike

我正在开发一个弹出模式框来提交表单。如果存在验证问题,表单应该会刷新,但仍在模态框内。这适用于添加新记录,我认为它调用了 :create 操作,一个 POST。我想使用相同的模态框来编辑一条记录。到目前为止,我可以让它在模式框中打开,但一旦出现错误,它就会重定向到另一个页面,而不是留在框内。我认为 ajax 没有调用返回 javascript 的操作来将表单放回模式框内。如何让 ajax 将 javascript 返回到模态框以更正表单?

例如,这是我的 :create 操作:

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.erb 文件,如果存在验证错误以将表单保留在模态框内,则 :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's 我使用了一些 jQuery 来创建一个变量来获取动态链接并将其传递给选择器:

var myid = jQuery('#userform').children().attr('id');

然后,它在哪里询问我传入的表单的 id

'#' + myid  

无论如何,我按照上面的教程让它工作,甚至能够修改它以添加新用户和编辑用户。

关于javascript - Rails 如何通过 :update controller action 中的 Ajax 调用返回 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5740648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com