1

在 Rails 3.2 应用程序中,我有一个在 DOM 元素上呈现图表的 jquery 函数

#assets/scripts.coffee.erb
$(document).ready ->
  $("#chart_container").do_some_stuff

#view
<div id="chart_container"></div>

我正在处理这个视图,以使用户能够切换图表上显示的数据。问题是咖啡脚本不是通过 ajax 响应触发的。

如果我将函数放在视图上的一些标签中,一切正常,但这不是一个非常“好”的解决方案。

或者,我知道可以从 ajax 响应呈现的 view.js.erb 调用函数。就像是

#view.js.erb
$('#chart_container')['myFunction']();

但是我的 javascript 知识是有限的,而且我无法弄清楚如何正确命名 coffeescript 函数。

我需要在文档准备好时触发该功能。但我还需要能够通过 ajax 响应手动调用该函数。我应该如何设置?

(我怀疑这是一个非常基本的 javascript 问题,而且问得不是很好,但我感谢任何指导)。

4

1 回答 1

3

您可以首先将代码包装到函数中

#assets/scripts.coffee.erb
$(document).ready ->
  $(document).chart_action()

$.fn.chart_action = ->
  $("#chart_container").do_some_stuff

然后在您的 ajax 响应模板中调用此函数

#view.js.erb
$(document).chart_action()

更新版本

感谢@muistooshort 的建议,最好使用自定义命名空间而不是污染 jQuery,即使使用量很小。

所以,重构上面

# Custom functions for this app
class App
  chart_action: -> 
    $("#chart_container").do_some_stuff

# Normal code for initializing page
app = new App
$(document).ready ->
  app.char_action()

# view.js.erb
app.chart_action()
于 2013-07-02T16:35:34.553 回答