ruby-on-rails-3 – 使用JS在Rails 3,HAML中从远程更改为非远程

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – 使用JS在Rails 3,HAML中从远程更改为非远程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题是,我有一个远程表单,根据条件,id喜欢转换为非远程表单(使用UJS),然后提交.
注意表单有文件上传.

这里的细节:我最初渲染了远程表单

= form_for @myobj,:url => {:action=>"remoteAction",:controller=>"myobjects"},:remote => true do |f|
... (f.fields....)

它产生HTML:

<form id="new_myobj" class="new_myobj" method="post" accept-charset="UTF-8" data-remote="true" action="/remoteAction">

当我点击提交,按预期,表单提交’AS JS’.
在控制器操作中,我正在对提交的表单中的字段进行一些验证.
如果所有验证通过,我执行以下.js.haml模板:

$('form#new_myobj').removeAttr("data-remote");
$('form#new_myobj').attr('enctype','multipart/form-data');
$('form#new_myobj').attr('action','/myobjects/regularAction');

它成功地将页面上的HTML(通过Firebug见证)更改为:

<form id="new_myobj" class="new_myobj" method="post" accept-charset="UTF-8" enctype="multipart/form-data" action="/myobjects/regularAction">

因为表单包含一个f.file_field,所以我必须以multipart的形式提交图像,因此可以上传图像,我无法提交’AS JS’
现在,当我点击提交时,控制器动作“regularAction”确实被调用,但它仍然是“AS JS”

问题是,我还需要在HTML中更改哪些表单可以提交非xhr?是否与标题有关?

解决方法

jQuery是数据属性有点棘手,因为它们都是
读取HTML5数据标签以及其自己的存储绑定到
DOM元素,也称为数据.写入属性
该值被复制到jQuerys自己的数据存储(大概是
当数据(“远程”)被调用时).

但是,这只会发生
如果jQuery的数据对于该名称为空.因此,设置属性将仅工作一次,之后使用“缓存”值
即使属性更改.为了真正摆脱
值,我们需要删除属性和jQuerys自己的存储
方法.原因是有一个高层
(element.removeData(…))和低级别(jQuery.
removeData(element,…)).前者重新读取HTML5数据
属性并将其存储在jQuery自己的存储中.使用相反
不寻常的低水平功能也很明显.

此外,我们确实需要删除属性 – 将其设置为
false是不够的,因为Rails只检查form.data(‘remote’)
不是未定义(在jquery_ujs.js中查找它).

TL; DR:

> attr(“data-remote”)!= data(“remote”)
>这两行使一个窗体非遥远(再次).订购事宜

$("form").removeAttr("data-remote");
  $("form").removeData("remote");

记录下来,如果你真的知道你在找什么:

> http://api.jquery.com/jQuery.data/(低电平功能)
> http://blog.madebydna.com/all/code/2011/12/05/ajax-in-rails-3.html

StackOverflow不允许我发布两个以上的链接,但您可以猜测removeData一个.高层次的功能与低层次的功能相关联.

避免Rails 4中的令牌真实性错误
正如Stan在以下评论的那样,只要执行上述操作就会失败,并显示InvalidAuthenticityToken错误.解决方法很简单,请参阅这里了解详细信息:http://stackoverflow.com/a/19858504/1684530

猜你在找的Ruby相关文章