使用资产.js.coffee文件时的RuntimeEror

时间:2011-10-25 11:50:12

标签: jquery ruby-on-rails-3.1 coffeescript

我刚刚开始使用rails 3.1和jQuery / coffee脚本。我有一段js代码,当它包含在我的视图中的标记中时,但当包含在app / assets / javascripts / post.js.coffee中时,它会引发以下错误:

  帖子#new

中的

ExecJS :: RuntimeError      

显示   /home/chris/RailsDev/blog/app/views/layouts/application.html.erb在哪里   第10行提出:

     

第7行的保留字“功能”(in   /home/chris/RailsDev/blog/app/assets/javascripts/post.js.coffee)

这有效:

应用程序/视图/帖/ new.html.erb

<%= form_for [@user, @post] do |f| %>
      <div class="field">
        <%= f.label :title %><br />
        <%= f.text_field :title %>
      </div>
      <div class="field">
        <%= f.label :content %><br />
        <%= f.text_area :content %>
      </div>
      <div class="field">
        <label for="forward_date">Post in the future?</label>
        <%= check_box_tag 'forward date' %>
        <div id="post_date" style="display: none;">
          <%= f.label :post_date %>
          <%= f.datetime_select :post_date %>
        </div>
      </div>
      <div class="actions">
        <%= f.submit "Create" %>
      </div>
    <% end %>
    <script>
      $("#forward_date").change(function() {
        if($(this).is(":checked")) {
          $("#post_date").show("slow");
        } else {
          $("#post_date").hide("slow");
        }
      });
    </script>

抛出ExecJS :: RuntimeError

从视图中删除标记并将代码放在app / assets / javascripts / post.js.coffee中

$("#forward_date").change(function() {
  if($(this).is(":checked")) {
    $("#post_date").show("slow");
  } else {
    $("#post_date").hide("slow");
  } 
});

2 个答案:

答案 0 :(得分:2)

这不是你在Coffeescript中声明一个函数的方式。而不是关键字function使用->

$("#forward_date").change -> 
  if $(this).is ":checked"  
    $("#post_date").show "slow"
  else
    $("#post_date").hide "slow"

答案 1 :(得分:2)

coffeescript不是coffeescript

应该是:

$("#forward_date").change ->
  if $(this).is(":checked")
    $("#post_date").show "slow"
  else
    $("#post_date").hide "slow"