提问人:Lance 提问时间:5/11/2010 最后编辑:Jon SeigelLance 更新时间:2/19/2014 访问量:19198
Rails 3 的 “data-method='delete'” 是如何优雅降级的?
How Does Rails 3's "data-method='delete'" Degrade Gracefully?
问:
Rails 3 做了一些很酷的事情来使 Javascript 不显眼,所以他们做了这样的事情:
= link_to "Logout", user_session_path, :method => :delete
..转换为
<a href="/logout" data-method="delete" rel="nofollow">Logout</a>
但它只是发生在我身上。当我关闭 javascript 时,该方法不再是 DELETE,而是预期的 GET。那么,是否有计划,或者有没有办法允许这些属性优雅地降级,以便该链接仍然是 DELETE 请求?data-
答:
您唯一的机会是定义一个表单。链接不能是 _method=“delete” 的 POST,没有 Javascript 或按表单。
评论
他们在 Rails 3 中对这些属性所做的更改不是关于优雅的降级,而是关于不显眼的 JavaScript。data-
在 Rails 2 中,在链接上指定会生成一大堆内联 JavaScript,这些 JavaScript 会创建一个带有隐藏输入的表单,然后提交表单。这和现在是一样的:关闭 JavaScript,它默认为 GET 请求。因此,支持没有 JavaScript 的情况与以前相同。:method => :delete
一种选择是使用表单/按钮而不是链接,这样您就可以将该方法作为隐藏字段包含在内,就像 Rails 2 JavaScript 所做的那样。另一种选择是让 GET 版本将您带到一个中间页面,该页面又具有表单/按钮。
新方法的好处是它不显眼。用于更改 HTTP 谓词的 JavaScript 存在于外部文件中,并使用属性来确定应将其附加到哪些元素。data-
与其使用该方法(这需要您使用 JavaScript 来确保 HTTP 方法有效),不如使用该方法,该方法将创建一个带有隐藏输入元素的表单,该元素告诉 Rails 将 HTTP 方法视为 而不是 .如有必要,可以使用 CSS 设置窗体中按钮的样式,使其看起来像链接。link_to
DELETE
button_to
DELETE
POST
评论
button_to
button_to
没有javascript是不可能的。
我制作了一个小的jQuery插件,用于将链接属性转换为伪隐藏形式(例如,在laravel项目中使用)。data-method
评论