2012-06-22 39 views
11

Đây là mã Tôi hiện có:suy ruby ​​câu lệnh if trong Haml javascript khối

:javascript 
    // do something 
- if current_user.role? :client 
    :javascript 
     //do something else 

Đó là rõ ràng không phải là rất sạch kể từ khi tôi đang lặp lại: javascript Haml lọc. Tôi muốn tránh điều đó, nhưng tôi không biết cách viết đúng câu lệnh "if" của Ruby bên trong khối HAML: javascript.

Tôi biết cách nội suy các biến với # {}, nhưng làm thế nào để bạn làm tương tự cho toàn bộ nếu/cho/etc. các câu lệnh?

Trả lời

-3

Điều đó khá đúng.

Tùy chọn khác là bạn có thể đặt nó trong một phần .js.erb một phần và hiển thị từ chế độ xem của bạn.

Sau đó, bạn chỉ có thể làm

// do something 
<% if condition == true %> 
    // do something else 
<% end %> 
3

Tôi đã không thử nó, nhưng tôi nghĩ rằng bạn có thể làm

:javascript 
    // do something 
- if current_user.role? :client 
    ="//do something else" 

(Như trong ví dụ thứ hai here.)

Đối với một chút javascript ngắn, bạn cũng có thể thử

:javascript 
    // do something 
    #{current_user.role? :client ? "//do something else" : ""} 
-1

Tôi đã thực hiện điều này thông qua một cuộc gọi = yield :foot_scripts trong cách bố trí của tôi, sau đó thì:

= if condition 
    - content_for :foot_scripts do 
    - render :partial => "page_specific_javascript" 

trong quan điểm của tôi - cách mà tôi có thể đảm bảo Javascript được thực hiện chính xác nơi tôi muốn nó được trong DOM (SAU KHI mọi thứ khác), và duy trì nó trong một tập tin riêng biệt, đó là bao la sạch hơn. Lấy tập lệnh ra khỏi tệp xem của bạn? TỐT!

2

Tôi làm điều này:

if(#{params[:param_to_check_for].blank? ? "true" : "false"}) 

Trong trường hợp trên, điều kiện là params[:param_to_check_for].blank?.

Nó ám chỉ rằng JavaScript là một trong hai: if(false) hoặc if(true)

+1

Tại sao là đúng một chuỗi , nhưng sai một boolean? – onebree

+0

@HunterStevens không có lý do chính đáng ... có lẽ chỉ vì nó đã hoạt động :) đã được khắc phục ngay bây giờ. – Caleb

0

Tôi đã suy biến Ruby/HAML vào rõ ràng JS true hoặc false cho tình trạng JS như thế này:

$("#cancel").click(function() { 
    if (#{ !!my_flag_variable }) 
    window.location.href = "./"; 
    else 
    $("#dialog").hide(); 
}); 
Các vấn đề liên quan