Javascript js格式的Rails代码不起作用

Javascript js格式的Rails代码不起作用,javascript,ruby-on-rails,Javascript,Ruby On Rails,我正试图实现一项复杂的任务,但面临一个问题,即从format.JS调用我的JS代码时无法工作 我与这些代码有联系: =link\u to new\u user\u support\u letter\u path,{:id=>'contact-us',:remote=>true} 在myuser\u support\u letters\u controller.rb中: def new @letter = UserSupportLetter.new respond_to do

我正试图实现一项复杂的任务,但面临一个问题,即从
format.JS
调用我的JS代码时无法工作

我与这些代码有联系:
=link\u to new\u user\u support\u letter\u path,{:id=>'contact-us',:remote=>true}

在my
user\u support\u letters\u controller.rb中:

  def new
    @letter = UserSupportLetter.new
    respond_to do |format|
      format.js {}
      format.html
    end
  end
new.js.erb
中:

  def new
    @letter = UserSupportLetter.new
    respond_to do |format|
      format.js {}
      format.html
    end
  end
警报(“rrr”)

所以,当我点击一个链接时,什么也没发生

用于单击链接的有意义日志:

I, [2016-10-19T21:47:41.130608 #1]  INFO -- : Started GET "/user_support_letters/new" for 172.18.0.6 at 2016-10-19 21:47:41 +0000
I, [2016-10-19T21:47:41.150411 #1]  INFO -- : Processing by UserSupportLettersController#new as JS
I, [2016-10-19T21:47:41.269853 #1]  INFO -- :   Rendered user_support_letters/new.js.erb within layouts/application (0.1ms)
I, [2016-10-19T21:47:41.344629 #1]  INFO -- :   Rendered application/_support_email.slim (0.1ms)
...

谁知道我做错了什么?塔克斯

要使其工作,您需要将布局设置为false,并声明您正在使用的内容类型

据我所知/所读,这是rails中的标准行为。下面是一篇类似的文章,其中有一个bug日志的链接

将控制器操作更改为:

  def new
    @letter = UserSupportLetter.new
    respond_to do |format|
      format.js { render layout: false, content_type: 'text/javascript' }
      format.html
    end
  end
默认情况下,它将尝试加载给定内容类型的当前布局。对于JS,它通常足够聪明,知道不加载布局。通过设置false,可以禁用布局,并告诉它在没有布局的情况下进行渲染


如果您使用某种形式的模板,似乎会对请求造成一些混乱。这似乎在评论中确定了slim模板的具体解决方案。这描述了另一种解决方案,基本上使用默认布局设置。有了这个,Rails似乎知道如何处理JS请求。

如果你设置了
或任何你用来调试的东西,它会在模板中停止吗?@JS模板中的fanta?查看本教程。我复制了他们用来排除故障的第一个警报示例。如果他们的格式有效,你将缩小你的问题范围。您还可以将new.js.erb中的警报更改为console.log(“调用已完成”),然后检查控制台以确保发出了请求并执行了js。@user3366016将代码放在
render js:
之后使其正常工作。但是,将它移到
new.js.erb
会再次破坏它。日志的编写方式与渲染类似(
Rendered user\u support\u letters/new.js.erb in layouts/application(1.0ms)
),但什么也没发生<代码>控制台。日志
不输出。那会是什么?你可以在行动中尝试一下。format.js{render layout:false,content_type:'text/javascript'}太好了,谢谢!我已经用谷歌搜索了好几个有同样问题的学生,但他们没有答案/让我去学习布局。