簡體   English   中英

在Rails中調用javascript函數onclick

[英]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沒有正確定義。 這樣做的推薦方法是什么?

我是網絡開發的新手

由於您是新手,請允許我就如何改進代碼提供一些建議:


不引人注目的JS(UJS)

本教程非常好地解釋了它

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM