在Rails中调用javascript函数onclick
我的一个观点中有以下代码:
并且,相应控制器的.js.coffee文件包含
analyze = -> $.ajax type: "GET" url: "http://localhost:3000/api/logs" success: (data) -> Analytics.doAnalysis data return; return;
但是,当我单击按钮时,我在控制台中收到一条错误,指出Uncaught ReferenceError:analyze未定义 。 我认为我的onclick没有正确定义。 这样做的推荐方法是什么?
我是网络开发的新手
既然你是新手,请告诉我一些关于如何改进代码的想法:
不引人注目的JS(UJS)
本教程非常好地解释了它
Rails惯例适用于“不引人注目的”javascriptfunction。 这意味着您可以将events
分配给页面上的元素,而无需直接引用这些元素( 不要使用内联onclick
等 )
这最好用与CSS相同的方式描述 – 使用inline
CSS是非常费力的,并被视为不好的做法(它不是DRY
)。 更好的方法是使用中央样式表,然后您可以使用它来设置页面上的元素样式。
不引人注目的Javascript以相同的方式工作 – 将所有内容保存在运行时调用的文件中:
#app/assets/javascripts/application.js $(".element").on("click", function(){ ... });
这个的重要性不能说得太充分 – 拥有不引人注目的JS是你可以应用的最好的编程模式之一; 它不仅可以破坏您的代码,还可以确保未来的开发可以保持模块化 (开发中的黄金标准)
阿贾克斯
由于您使用的是ajax,因此您可能希望使用Rails UJS Ajaxfunction ,这基本上意味着:
<%= button_to "Analyze", analytics_api_path, id: "analyze", remote: true %>
remote: true
选项调用Rails UJS驱动程序的ajax
function – 基本上设置一个ajax调用,而不必编写任何代码。 需要注意的是,您需要处理自己的ajax:success
过程,并且您需要将元素指向正确的href
我会这样做:
#app/assets/javascripts/application.js.coffee $("#analyze").on "ajax:success", (data, status, xhr) -> Analytics.doAnalysis data
改变这个:
analyze = ->
对此:
window.analyze = ->
默认情况下,coffeescript中的函数不是全局函数。