2013-04-05 40 views
5

Tôi đang chạy jQuery ở app/assets/javascripts/ticket.js.coffee cho một chế độ xem cụ thể. Mỗi lần tôi truy cập trang, trình duyệt sẽ hiển thị lỗi này - không có đề cập đến lỗi này ở bất kỳ nơi nào trực tuyến.Cú phápError: lỗi POST_IF không mong muốn Rails

(localhost: 3000/Vé/mới):

SyntaxError: unexpected POST_IF 

Extracted source (around line #6): 

3: <head> 
4: <title>Ops2</title> 
5: <%= stylesheet_link_tag "application", :media => "all" %> 
6: <%= javascript_include_tag "application" %> 
7: <%= csrf_meta_tags %> 
8: </head> 
9: <body> 

tập tin của trang ném lỗi -

app/views/vé/_form.html.erb:

<%= form_for(@ticket) do |f| %> 
<% if @ticket.errors.any? %> 
<div id="error_explanation"> 
<h2><%= pluralize(@ticket.errors.count, "error") %> prohibited this ticket from being saved:</h2> 
<ul> 
<% @ticket.errors.full_messages.each do |msg| %> 
<li><%= msg %></li> 
<% end %> 
</ul> 
</div> 
<% end %> 

<div class="field"> 
<%= f.label :school_id %><br /> 
<%= f.collection_select :school_id, School.order(:name), :id, :name, include_blank: true%> 
</div> 

<div class="field"> 
<%= f.label :location_id %><br /> 
<%= f.grouped_collection_select :location_id, School.order(:name), :locations, :name, :id, :name, include_blank: true%> 
</div> 

<div class="actions"> 
<%= f.submit %> 
</div> 
<% end %> 

app/assets/javascripts/application.js c ontains:

//= require jquery 
//= require jquery_ujs 
//= require_tree . 

tập tin Coffeescript với jQuery -

ứng dụng/tài sản/Javascripts/tickets.js.coffee:

$ -> 
$('#ticket_location_id').parent().hide() 
    locations = $('#ticket_location_id').html() 
$('#ticket_school_id').change -> 
    school = $('#ticket_school_id :selected').text() 
    options = $(locations).filter("optgroup[label='#{school}']").html() 
if options 
$('#ticket_location_id').html(options) 
$('#ticket_location_id').parent().show() 
else 
$('#ticket_location_id').empty 
$('#ticket_location_id').parent().hide() 

Các lỗi POST_IF đã được giải quyết bằng cách thụt lề các if/else báo cáo trong kịch bản cà phê của tôi! (xem câu trả lời dưới đây để biết chi tiết) Không có lỗi và tải trang!

+0

Bạn có chắc chắn đó là tất cả các mã coffeescript bạn có? Thay thế ** // = require_tree. ** bằng ** // = yêu cầu vé ** và cho tôi biết nếu bạn vẫn gặp sự cố tương tự. Lỗi bạn có là phân tích cú pháp coffeescript sai, nếu điều đó không hiệu quả, hãy thử xóa tệp ticket.js.coffee để xem nó có hoạt động hay không, vì vậy ít nhất chúng ta có thể nhận ra rằng vấn đề nằm trong tệp ticket.js .coffee – rorra

+0

Tôi thứ hai xóa // = require_tree. Nó đã gây ra cho tôi tất cả các loại đau trong quá khứ. Tốt hơn hết là để sperate tất cả các javascripts của bạn vào các thư mục và sau đó yêu cầu các thư mục đó thì nó là sử dụng // = require_tree. – rovermicrover

+0

thay thế // = require_tree. với // = yêu cầu vé mang lại cho tôi lỗi tương tự, không thay đổi. nếu tôi xóa jQuery trong tệp ticket.js.coffee, các trang của tôi tải chính xác. trên thực tế, nếu tôi xóa câu lệnh 'if' và' else' trong jQuery, trang sẽ tải nhưng jQuery vẫn không chạy. – Devin

Trả lời

5

Bạn đang thiếu thụt lề cho tuyên bố if của mình. Thụt lề là quan trọng trong CoffeeScript.

này ...

if options 
$('#ticket_location_id').html(options) 
$('#ticket_location_id').parent().show() 
else 
$('#ticket_location_id').empty 
$('#ticket_location_id').parent().hide() 

... nhu cầu được này, thụt đầu dòng hàng đầu là không bắt buộc:

if options 
    $('#ticket_location_id').html(options) 
    $('#ticket_location_id').parent().show() 
else 
    $('#ticket_location_id').empty 
    $('#ticket_location_id').parent().hide() 
+0

Ồ, cảm ơn! Tôi không tìm thấy ở đâu cả! Điều này là tuyệt vời, lỗi POST_IF không hiển thị nữa vì vậy tôi là một bước gần hơn nhưng bây giờ nó vẫn không chạy jQuery của tôi. Bất kỳ ý tưởng? – Devin

+0

Tôi đã làm cho nó hoạt động!Nó phải có một cái gì đó với không gian màu trắng và thụt đầu dòng trong jQuery của tôi cũng không chạy nó. Tôi không biết Coffeescript rất cầu kỳ về khoảng trắng. Cảm ơn bạn! – Devin

+0

CoffeeScript là * tất cả khoảng * khoảng trắng, mức thụt lề trước một dòng mã là cực kỳ quan trọng. Các câu lệnh if của bạn không làm bất cứ điều gì nếu cơ thể của chúng không bị thụt vào. Làm thế nào khác bạn mong đợi CoffeeScript để biết những gì dòng đi với tuyên bố đó, khi bạn không có gì có nghĩa là đóng một khối như 'end' hoặc'} 'hoặc' '? – meagar

Các vấn đề liên quan