[英]Call javascript function onclick in Rails
我的一個觀點中有以下代碼:
<button type="button" onclick="analyze();">Analyze</button>
並且,相應控制器的.js.coffee文件包含
analyze = ->
$.ajax
type: "GET"
url: "http://localhost:3000/api/logs"
success: (data) ->
Analytics.doAnalysis data
return;
return;
但是,當我單擊按鈕時,我在控制台中收到一條錯誤,指出Uncaught ReferenceError:analyze未定義 。 我認為我的onclick沒有正確定義。 這樣做的推薦方法是什么?
我是網絡開發的新手
由於您是新手,請允許我就如何改進代碼提供一些建議:
Rails慣例適用於“不引人注目的”javascript功能。 這意味着您可以將events
分配給頁面上的元素,而無需直接引用這些元素( 不要使用內聯onclick
等 )
這最好用與CSS相同的方式描述 - 使用inline
CSS是非常費力的,並被視為不良做法(它不是DRY
)。 更好的方法是使用中央樣式表,然后您可以使用它來設置頁面上的元素樣式。
不引人注目的Javascript以相同的方式工作 - 將所有內容保存在運行時調用的文件中:
#app/assets/javascripts/application.js
$(".element").on("click", function(){
...
});
這一點的重要性不能說得太充分 - 擁有不引人注目的JS是您可以應用的最佳編程模式之一; 它不僅可以破壞您的代碼,還可以確保未來的開發可以保持模塊化 (開發中的黃金標准)
阿賈克斯
由於您使用的是ajax,因此您可能希望使用Rails UJS Ajax功能 ,這基本上意味着:
<%= button_to "Analyze", analytics_api_path, id: "analyze", remote: true %>
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
改變這個:
analyze = ->
對此:
window.analyze = ->
默認情況下,coffeescript中的函數不是全局的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.