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}
在myuser\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'}太好了,谢谢!我已经用谷歌搜索了好几个有同样问题的学生,但他们没有答案/让我去学习布局。