Javascript 调试渲染的JS输出的去向

Javascript 调试渲染的JS输出的去向,javascript,ruby-on-rails-3,twitter-bootstrap,Javascript,Ruby On Rails 3,Twitter Bootstrap,我有一个Rails 3应用程序,在链接上使用不引人注目的Javascript,以创建一个需要用户输入的小窗口。以下是原始按钮(用于客户端添加Cat时): 在app/views/cats/new.js.erb中: $('#<%= dom_id(@cat) %> .details').html('<%= escape_javascript render("new") %>'); $('#<%= dom_id(@cat) %> .details').html('&

我有一个Rails 3应用程序,在链接上使用不引人注目的Javascript,以创建一个需要用户输入的小窗口。以下是原始按钮(用于客户端添加Cat时):

在app/views/cats/new.js.erb中:

$('#<%= dom_id(@cat) %> .details').html('<%= escape_javascript render("new") %>');
$('#<%= dom_id(@cat) %> .details').html('<%= escape_javascript render(:partial=>"new") %>');
我怎样才能知道输出将渲染到哪里,以便我能够找出为什么在用户单击“新建Cat”按钮的同一窗口中看不到它?

您将返回渲染(“新建”)。相反,您可能希望渲染局部。因此,从新视图中提取实际的表单定义,并将它们放在部分“\u new.html.erb”中

因此,新的.html.erb将包含

<%= render :partial=>'new' %>
“新建”%>
以及您的新.js.erb:

$('#<%= dom_id(@cat) %> .details').html('<%= escape_javascript render("new") %>');
$('#<%= dom_id(@cat) %> .details').html('<%= escape_javascript render(:partial=>"new") %>');
$('#.details').html(“'new”)%>”;
我仍然不确定这是否完全解决了您试图做的事情,但它应该让您朝着正确的方向前进。例如,您将返回的HTML放入哪个元素?它必须是一个元素,由一个现有的表单_围绕。你可以这样做,也许:

<%= form_tag  '/thing/create',  :html=>{:style=>'display:none'} do %>
  <div id='newform'>
    <%= render(:partial=>'new') %>
  </div>
<% end %>
{:style=>'display:none'}do%>
“新建”)%%>
然后:

$('newform').html('new')%>;
$(#newform')。show;
请注意,这种方法不允许使用以下方法:

<%= form_for @resource  do |f| %>
  <% f.text_field :foo %>
<% end %>

您不能将封闭f块发送到控制器,并让控制器操作尝试在部分中处理此操作:

<%= f.text_field :foo %>

因此,你必须求助于:

<%= form_tag .... do %>
  <%= render_partial=>'new' %>
<% end %>

'新'>
和在_new.html.erb中

<%= text_field_tag , 'thing[foo]', @thing.foo %> 

当控制器响应AJAX请求发送回HTML时,通常会将其定向到浏览器,HTML中包含关于broswer页面上的哪些元素受到影响的说明

例如,您可以这样做:

render :js=>"$('#foobar').html('<h1>TITLE</h1><p>foobar</p>')";
render:js=>“$('#foobar').html('TITLEfoobar

”)”;
或者这个:

render :js=>"$('#barfoo').html('<h1>TITLE</h1><p>barfoo</p>')";
render:js=>“$('#barfoo').html('TITLEbarfoo

')”;

每一个都会影响页面上的不同元素。

谢谢,@RadBrad。最初的问题是我有一个链接,现在是AJAX,所以它不会刷新整个屏幕。我希望用户能够点击链接,并在屏幕的一个角落(侧边栏)设置一个小对话框。你是link has remote=>true,所以你向控制器发送一个AJAX请求,它返回javascript,完成隐藏表单,然后取消隐藏。是的,但不知怎么的,我不太明白如何弄清楚HTML的去向。今天早些时候,有人建议我对链接使用remote=>true,这样我就不会丢失用户的主客户端屏幕,同时我会弹出窗口获取用户的输入。我现在正在准备一个小的示例应用程序来展示它。你有我可以发送指针的电子邮件地址吗?我非常感谢你在这方面的帮助。你的方法很好——现在如果我在另一个选项卡中打开它,它就会起作用。我还不明白的是如何处理返回的HTML——如何将它放在用户单击按钮的原始屏幕上。我也是一个“老程序员”:
<%= text_field_tag , 'thing[foo]', @thing.foo %> 
render :js=>"$('#foobar').html('<h1>TITLE</h1><p>foobar</p>')";
render :js=>"$('#barfoo').html('<h1>TITLE</h1><p>barfoo</p>')";