0

次のhamlコードがあります:

%input{:value => "", :type => "button",:class => "SendBtn", :onclick => "$.get('#{send_path}',{parameter:$('#parameter').val()}); "}

この入力は、コントローラーでイベントを実行します。

// This is my controller
def send

    if request.xhr?
        // do stuff
    end
end

しかし、対応する .js.erb ファイル内の私の js コードは実行されていません。getリクエストのレスポンスとして返されます。

// send.js.erb
alert('hello');

このコードを実行するレールの方法は?

4

2 に答える 2

5

あなたの問題は Rails 関連ではなく、jQuery です。メソッドを使用するとget、多かれ少なかれプレーンテキストをフェッチするだけです。これは実行されません。テキストで行うこともできますevalが、より良い方法があります。getScriptjQueryのメソッドを使用します。これにより、コードがフェッチされて実行されます。

補足として、コードで私を悩ませていることが2つあります。

  1. インライン JavaScript を使用しています。data-このような送信パスの属性を使用してこれを削除し、ファイルdata: { sendPath: send_path }で取得し$(yourInput).data('sendPath')てください。application.js
  2. 私の個人的な見解では、実行中の JavaScript コードを ERB テンプレートに入れるのは好きではありません。これにより、アプリのフロント エンド ロジックが断片化されていることがわかりました。私にとっては、ロジックを.jsファイルに入れ、JSON 経由でサーバーと通信する方がうまくいきました。
于 2012-05-26T20:42:12.917 に答える
1

@topek が言ったように、使用する必要があります$.getScript。また、あなたの状況では、より良いアプローチは、プレーンの代わりにプロパティを使用button_toすることです。:remote => trueinput

<%= button_to "Do Something", 
              { :controller => :somecontroller, :action=> :something }, 
              { :remote => true } 
 %>

また、属性を button_to に渡すこともできます (ただし、ルート定義にパラメーターを追加しています)。

<%= button_to "Do Something",
         { :controller => :somecontroller, :action=> :something, :param => @object.id },
         { :remote => true } %>

ここにドキュメントがありますbutton_tohttp://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-button_to

于 2012-05-26T20:53:36.313 に答える