在Rails中调用javascript函数onclick

在Rails中调用javascript函数onclick,javascript,jquery,ruby-on-rails,ruby-on-rails-4,coffeescript,Javascript,Jquery,Ruby On Rails,Ruby On Rails 4,Coffeescript,我的一个视图中包含以下代码: <button type="button" onclick="analyze();">Analyze</button> 但是,当我单击按钮时,控制台中会出现一个错误,提示未捕获引用错误:未定义分析。我认为我的onclick定义不正确。推荐的方法是什么?更改此选项: analyze = -> 为此: window.analyze = -> 默认情况下,coffeescript中的函数不是全局函数 我是网络开发新手 由于您是新手

我的一个视图中包含以下代码:

<button type="button" onclick="analyze();">Analyze</button>
但是,当我单击按钮时,控制台中会出现一个错误,提示未捕获引用错误:未定义分析。我认为我的onclick定义不正确。推荐的方法是什么?

更改此选项:

analyze = ->
为此:

window.analyze = ->
默认情况下,coffeescript中的函数不是全局函数

我是网络开发新手

由于您是新手,让我给您一些关于如何改进代码的想法:


Rails约定面向“不引人注目的”javascript功能。这意味着您可以将
事件
分配给页面上的元素,而无需直接引用这些元素(不要使用内联
onclick
等)

这一点最好用与CSS相同的方式来描述——使用
inline
CSS非常费劲,被视为不好的做法(它不是
DRY
)。更好的方法是有一个中心样式表,然后您可以使用它来设置页面上元素的样式

低调的Javascript以同样的方式工作-将所有内容保存在运行时调用的文件中:

#app/assets/javascripts/application.js
$(".element").on("click", function(){
    ...
});
这一点的重要性再怎么强调也不为过——拥有不引人注目的JS是您可以应用的最佳编程模式之一;它不仅会使您的代码干涸,而且还可以确保未来的开发得以保持(开发中的黄金标准)


Ajax

由于您使用的是ajax,您可能希望使用,这基本上意味着:

<%= button_to "Analyze", analytics_api_path, id: "analyze", remote: true %>
非常感谢:)我对网络开发还不熟悉,而且还有一个。是否有任何方法可以访问该函数而不使其成为全局函数?最佳实践是什么?“最佳”实践是有争议的,但您可能会阅读“不引人注目的”javascript。在一个完美的世界中,您的Javascript将自己注入HTML,而不是指向Javascript函数的HTML。见:
<%= button_to "Analyze", analytics_api_path, id: "analyze", remote: true %>
#app/assets/javascripts/application.js.coffee
$("#analyze").on "ajax:success", (data, status, xhr) ->
    Analytics.doAnalysis data