Rails 4:部分渲染后无法使用javascript(使用ajax)

Posted

技术标签:

【中文标题】Rails 4:部分渲染后无法使用javascript(使用ajax)【英文标题】:Rails 4: Partial can't use javascript after being rendered (with ajax) 【发布时间】:2014-05-05 17:11:06 【问题描述】:

我正在使用 CoffeeScript 执行 Ajax 请求,然后从我的控制器渲染部分,但在渲染完部分之后,它无法使用我之前的 javascript

例子:

最后我的home_controller 我有:

respond_to do |format|
   format.html  render partial: 'frame' 
end

在我的home.js.coffee

$('#plouf').click -> 
  alert('test')

然后在我的部分_frame.html.erb(在views文件夹的主文件夹中)

<span id="plouf">test<span>

如果我点击这个跨度,什么都不会发生......

<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

但是如果我在我的部分中添加这一行它可以工作,但我知道它很难看,因为我已经在我的 application.html.erb 中这样做了

我是否遗漏了什么,或者部分不能使用任何以前的 Javascript 是否正常?

【问题讨论】:

【参考方案1】:

在浏览器运行 javascript 之前,部分被编译到视图中。

你需要的是

$(document).on 'click', '#plouf', ->
  alert('test')

这会将事件绑定到文档,因此当 turbolinks 或 ajax 重新加载 HTML 时,您的事件处理程序仍然处于活动状态。

【讨论】:

谢谢!我现在理解得更好了,但我不得不重写为:$(document).on('click', '#plouf', ( -&gt; alert('test'))) 请修正逗号,应该是:$(document).on 'click', '#plouf', -&gt; @d_rail 更好吗?您也可以随时提出修改建议:) 如果我想在渲染上应用一些 js,而不是在点击或更改等特定事件上应用一些数据表属性。

以上是关于Rails 4:部分渲染后无法使用javascript(使用ajax)的主要内容,如果未能解决你的问题,请参考以下文章

Rails Ajax - 渲染不同的部分

从rails中的控制器渲染部分

Rails 4 使用 ajax、jquery、:remote => true 和 respond_to 渲染部分

在部分 Rails 4.0 中渲染表格

如何在 Rails ERB 文件的渲染部分 url 中访问 java 脚本变量?

渲染更多部分会降低 Rails Web 应用程序的性能吗?