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');

执行此代码的 rails 方式如何?

4

2 回答 2

5

您的问题与 Rails 无关,是 jQuery。使用该get方法,您只是获取或多或少的纯文本。这不会被执行。您可以eval对文本进行操作,但有更好的方法。使用getScriptjQuery 中的方法。这将获取并执行您的代码。

作为旁注,您的代码中有两件事困扰着我:

  1. 您正在使用内联 JavaScript。尝试通过使用data-您的发送路径的属性来删除它,例如 this data: { sendPath: send_path },并$(yourInput).data('sendPath')在您的application.js文件中检索它。
  2. 从我个人的角度来看,我不喜欢在 ERB 模板中执行 JavaScript 代码。我发现这破坏了我的应用程序的前端逻辑。对我来说,将逻辑放在.js文件中并通过 JSON 与服务器通信会更好。
于 2012-05-26T20:42:12.917 回答
1

正如@topek 所说,您必须使用$.getScript. 同样在您的情况下,更好的方法是使用button_towith :remote => trueproperty 而不是 plain input

<%= 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 回答