如何使用coffeescript处理rails上的响应?

时间:2013-10-03 15:06:25

标签: ruby-on-rails

我有一张表格

<%= form_tag check_question_path(:id => @question.id), class: "check-form", remote: true do %>

表单已发送到服务器,我在浏览器上跟踪响应,但未触发coffescript。

  $(".check-form").on("ajax:success", (e, data, status, xhr) -> alert("cool"); console.log("success"))

我错过了什么?

2 个答案:

答案 0 :(得分:0)

检查文件扩展名 - 如果它没有以.coffee结尾,那么你在那里的CoffeeScript在被送回客户端之前将不会转换为JavaScript,这意味着它将无效,这意味着浏览器不会运行它。

使用Rails中的视图要记住的一件好事是,文件扩展名及其顺序决定了rails将如何解析某些内容。

例如,如果您有一个名为:

的视图
show.html.erb.coffee

然后从右到左,Rails将处理:

  1. 将文件中的任何CoffeeScript转换为JavaScript
  2. 文件中找到的任何ERB为HTML
  3. 最后,提供生成的HTML页面(即format.html
  4. 这实际上会产生一个HTML页面,其中包含一些嵌入式JavaScript,假设您的视图中有一些JavaScript或CoffeeScript。

    如果是,请改为:

    show.html.coffee.erb
    

    然后首先解析ERB,然后解析CoffeeScript,然后将其作为HTML进行解析。

    这是一个人为的例子,可能实际上不起作用,但这里的概念是你可以堆叠多个解析器,以便组合第一个点之后的项目(在本例中为.html)生成的响应格式类型。

    因此,在您的具体示例中,您的文件应该类似于:

    create.js.coffee
    

    因此,CoffeeScript在服务器端转换为JavaScript,然后作为JavaScript响应发送,可以由客户端直接执行。

答案 1 :(得分:0)

您确定已将coffeescript代码放入$(document).ready回调中吗?

类似的东西:

$(document).ready ()->
   $(".check-form").on("ajax:success", (e, data, status, xhr) -> alert("cool"); console.log("success"))

另外,你可以添加一个console.log或一个警告,看看当你加载页面时是否正在执行这段代码(一旦你测试了它就删除它!)< / p>

$(document).ready ()->
   $(".check-form").on("ajax:success", (e, data, status, xhr) -> alert("cool"); console.log("success"))
   ###
   console.log "This code is executing"
   alert "This code is executing"
   ###