Rails 3的“ Data-Method ='Delete'”如何优雅地降级?
题
Rails 3做一些很酷的事情以使JavaScript变得不引人注目,因此他们做了这样的事情:
= link_to "Logout", user_session_path, :method => :delete
..转换为
<a href="/logout" data-method="delete" rel="nofollow">Logout</a>
但是它只是发生在我身上..当我关闭JavaScript时,该方法不再删除,它已得到预期。因此,是否有计划或有其他方法可以允许这些 data-
优雅降级的属性,以便链接仍然是删除请求?
解决方案
他们在铁路3中所做的更改与这些 data-
属性与优雅的退化无关,而是关于javaScript的不可思议。
在Rails 2中,指定 :method => :delete
在链接上会生成一大堆内联JavaScript,该javaScript将创建带有隐藏输入的表单,然后提交表单。这与现在相同:关闭JavaScript,并默认为GET请求。因此,支持无JavaScript的情况与以前相同。
一种选项是使用表单/按钮而不是链接,因此您可以将方法包括为隐藏字段,就像Rails 2 JavaScript一样。另一个选择是让Get版本将您带到一个中间页面,该页面依次具有表单/按钮。
新方法的好处是它没有引人注目。用于更改HTTP动词的JavaScript存在于外部文件中,并使用 data-
确定应附加到哪些元素的属性。
其他提示
而不是使用 link_to
方法 - 这需要您使用JavaScript来确保HTTP方法为 DELETE
- 使用 button_to
方法,它将创建具有隐藏输入元素的表单,该元素告诉Rails将HTTP方法视为 DELETE
而不是 POST
. 。如有必要,您可以使用CSS在表单中为按钮样式,以使其看起来像一个链接。
您拥有的唯一机会是定义表格。没有JavaScript或通过表单,链接不能是_method =“ delete”的帖子。
没有JavaScript是不可能的。
我制作一个小型插件用于转换 data-method
链接属性与伪隐藏形式(例如,在Laravel项目中使用)。