Pee*_*ush 5 javascript jquery ruby-on-rails coffeescript ruby-on-rails-4
我的一个观点中有以下代码:
<button type="button" onclick="analyze();">Analyze</button>
Run Code Online (Sandbox Code Playgroud)
并且,相应控制器的.js.coffee文件包含
analyze = ->
$.ajax
type: "GET"
url: "http://localhost:3000/api/logs"
success: (data) ->
Analytics.doAnalysis data
return;
return;
Run Code Online (Sandbox Code Playgroud)
但是,当我单击按钮时,我在控制台中收到一条错误,指出Uncaught ReferenceError:analyze未定义.我认为我的onclick没有正确定义.这样做的推荐方法是什么?
Ric*_*eck 18
我是网络开发的新手
由于您是新手,请允许我就如何改进代码提供一些建议:
Rails惯例适用于"不引人注目的"javascript功能.这意味着您可以分配events到页面上的元素而无需直接引用这些元素(不要使用内联onclick等)
这最好以与CSS相同的方式描述 - 使用inlineCSS是非常费力的,并且被视为不好的做法(事实并非如此DRY).更好的方法是使用中央样式表,然后您可以使用它来设置页面上的元素样式.
不引人注目的Javascript以相同的方式工作 - 将所有内容保存在运行时调用的文件中:
#app/assets/javascripts/application.js
$(".element").on("click", function(){
...
});
Run Code Online (Sandbox Code Playgroud)
这一点的重要性不能说得太充分 - 拥有不引人注目的JS是您可以应用的最佳编程模式之一; 它不仅可以破坏您的代码,还可以确保未来的开发可以保持模块化(开发中的黄金标准)
阿贾克斯
由于您使用的是ajax,因此您可能希望使用Rails UJS Ajax功能,这基本上意味着:
<%= button_to "Analyze", analytics_api_path, id: "analyze", remote: true %>
Run Code Online (Sandbox Code Playgroud)
这个remote: true选项调用Rails UJS驱动程序的ajax功能 - 基本上设置一个ajax调用,而不必编写任何代码.需要注意的是,您需要处理自己的ajax:success进程,并且需要将元素指向正确的位置href
我会这样做:
#app/assets/javascripts/application.js.coffee
$("#analyze").on "ajax:success", (data, status, xhr) ->
Analytics.doAnalysis data
Run Code Online (Sandbox Code Playgroud)
gwc*_*fey 11
改变这个:
analyze = ->
Run Code Online (Sandbox Code Playgroud)
对此:
window.analyze = ->
Run Code Online (Sandbox Code Playgroud)
默认情况下,coffeescript中的函数不是全局的.
| 归档时间: |
|
| 查看次数: |
15119 次 |
| 最近记录: |