使用 Rails 3.2.8
选择链接会产生预期的确认对话,“哦,是吗?”。
选择“确定”按钮的预期结果是文本“表单在此处”<div id = "target">
应更改为“表单\nsnookum”。
实际结果是文本“表格到这里”消失了,但没有放置任何内容<div id = "target"></div>
显示 HTML5 doctype、rails 包含的 jQuery 文件和 AJAX 链接的页面代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title></title>
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<meta content="authenticity_token" name="csrf-param" />
<meta content="0ycwNRsr8kneUjB5/SFz+LD+bnhbQHXMJzgADbkv78g=" name="csrf-token" />
</head>
<body>
<a href="/sessions/new" data-confirm="oh yeah?" data-remote="true">Hello world!</a>
<div id="target">
the form goes here
</div>
</body>
</html>
会话控制器,
respond_with(@session)
将导致变量@session
传递到 app/views/sessions/new.js.erb
respond_to :html, :js
def new
@session = "snookums"
respond_with(@session)
end
模板:app/views/sessions/new.js.erb
var session_form = $('<%= j(render(:partial => "form")) -%>');
$('#target').html(session_form);
表单:app/views/sessions/_form.html.erb
使用 Firebug 检查元素
GET http://localhost/sessions/new Response
var session_form = $('the form\nsnookums');
$('#target').html(session_form);
开发日志
Started GET "/sessions/new" for 127.0.0.1 at 2012-11-10 15:57:20 -0500
Processing by SessionsController#new as JS
the form "snookums"
Rendered sessions/_form.html.erb (1.2ms)
Rendered sessions/new.js.erb (48.9ms)
Completed 200 OK in 65ms (Views: 64.0ms | ActiveRecord: 0.0ms)
一切似乎都是相互关联的。问题是我在 new.js.erb 中生成的响应有问题吗?是否$('#target').html(session_form);
相当于“将div‘target’的内容替换为‘session_form’中包含的文本?
顺便说一句,FWIW 我也在没有确认的情况下尝试过 - 没有区别。