【发布时间】:2019-12-19 07:22:06
【问题描述】:
这很好用:
class CommentsController < ApplicationController
def destroy
respond_to do |format|
format.js { render "destory.js.erb" }
end
end
end
这根本不工作(JavaScript 永远不会触发):
class CommentsController < ApplicationController
def destroy
respond_to do |format|
format.js
end
end
end
这是预期的吗?
我认为 Rails 应该自动知道使用 /comments/destroy.js.erb 视图?我总是必须明确定义 JavaScript 视图吗?
【问题讨论】:
-
这应该没有必要。 “不起作用”是什么意思?它会产生错误吗?它是否显示其他视图?
-
@tadman:“不起作用”是指 JavaScript 永远不会触发(视图只包含基本的
alert())。当我查看 Rails 日志时,我可以看到 Rails 正在尝试呈现 HTML 视图(不是 JS 视图):Rendering comments/destroy.html.erb Rendered comments/destroy.html.erb (0.6ms). -
返回 JavaScript 在应用程序设计方面有点不寻常,通常最好返回像 JSON 这样的数据,然后客户端 JavaScript 可以对其进行操作,但这原则上应该可行。问题可能是您的客户端没有明确要求 JavaScript,而是通过
Accepts标头要求 HTML。这不是 AJAX 要求 JSON 的情况。 -
你是怎么做的,因为如果你想加载 js 页面,你必须请求
comments/destroy.js,这通常是一个删除请求。comments/destroy将默认为html。路由将是DELETE comments/destroy(.format),其中(.format)是您请求的可选格式(默认为html),这是respond_to确定如何响应的方式 -
@tadman。谢谢!这一切都非常有帮助。我谷歌了一下,我想我找到了一个解释你在这里建议的教程:engineyard.com/blog/ajax-on-rails-with-unobtrusive-javascript这听起来像理想的方法吗?
标签: ruby-on-rails