2009-10-30 38 views
0

我有一个Web应用程序,允许用户通过弹出窗口编辑模型数据。当弹出窗口窗体完成时,用户单击“保存”按钮,窗口关闭,原始页面重新加载以显示发生在数据上的任何更新。Rails控制器保存模型和关闭弹出窗口的方法

我的技术只有时才有效。我不能为了我的生活找出它为什么一次工作,为什么它不是另一个。

在我的弹出窗口的形式,我有这样的submit方法:

<%= submit_tag("Update Invoice", {:onclick=>"refreshParent()"}) %> 

因此,JavaScript是在该表单被提交到控制器同时执行理想。下面是refreshParent()JavaScript函数:现在

function refreshParent(id) { 
    window.opener.location.reload(); 
    window.close(); 
} 

,通过我的表格(在这种情况下,“更新”)调用的方法不具有redirect_to的方法调用,但即使当我做(比如,在原始视图,索引),这似乎并不重要。

在根,似乎我的控制器方法不会触发表单提交。有时。我可以多次提交相同的表单数据,并且会第三次运行。或者有时它可以马上工作。这完全是随机的。

如何确保我的控制器方法在关闭弹出窗口时触发?

谢谢, 亚伦。

回答

0

如果我的理解正确,您希望页面上的表单发布,但您也希望窗体关闭。不幸的是,您现在设置的方式,无法在关闭窗口之前检查表单是否已成功发布。因此,如果窗口在表单发布之前关闭,则请求可能无法完成,数据也不会发送到您的控制器。

更好的解决方案是在Ajax请求成功完成后用Ajax发布表单并关闭窗口。

jQuery这样的库使得Ajax变得简单,所以没有理由不使用它。

+0

啊,你的评论让我的脑袋响彻了我的脑海!我没有在弹出窗体上调用form_for,而是调用了remote_form_for,并从提交按钮中删除了onclick事件。然后在RJS中,我刚刚输入了相同的调用来关闭窗口,并重新载入了我在单独函数中使用的父代: page <<“window.opener.location.reload();” page <<“window.close();” 热潮!一切都很好!非常感谢您的建议;没有必要的jQuery! – 2009-10-30 22:59:02

+0

我一直在使用jQuery和Rails一段时间,并且完全忘记了Rails内置的所有JS帮助器。很高兴我能够提供一些灵感! – 2009-10-31 06:00:49

0

我想你正在经历糟糕的JavaScript性能和网络延迟问题的一些组合。这些请求是否真的显示在服务器上?