2014-12-08 10 views
0

在我的application_controller中。在javascript條件下使用rails實例變量

def ensure_service_agreement 
    if current_user.agrees_to_service == true 
    @tos = true 
    else 
    @tos = false 
    end 
end 

我在我的application.js文件中有以下代碼。

var tos = "<%= @tos %>"; 
if(tos == false){ 
    $(".new-session-home").on('click', function(){ 
     $('.booking.modal') 
     .modal('show'); 
    }) 
}else{ 
    $(".new-session-home").on('click', function(){ 
     $('.tos.modal') 
     .modal('show'); 
    }) 
} 

JavaScript似乎沒有註冊var tos。當我將第一個if語句設置爲true或false時,我得到第二個模態(tos模式)

如果我設置tos = 4然後檢查那個數字,它就像它應該那樣工作,所以我知道這個問題是與rails實例變量。

如何獲得JS來理解我的實例變量?

+1

它是js文件,它無法讀取erb語法.. – Nithin 2014-12-08 06:46:13

+0

這是我的問題,我需要coffeescript呢? – Peege151 2014-12-08 06:49:26

+0

noeps,你需要controller_action_name.js。erb – argentum47 2014-12-08 06:59:57

回答

0

您正試圖在js文件中操作rails代碼。但是你不會在那裏得到任何erb語法。

解決此類請求有多種解決方案。如果您提交表單或重定向到某個網址,則可以使用ujs來執行此操作(使用:remote => true)。

UJS在.js.erb文件中響應,您可以訪問js和erb語法。

如果您沒有提交或沒有網址更改,那麼您可以輕鬆地使用jQuery來做到這一點。像

<a href='#' onclick="somefunction(true/false)">booking/tos</a> 

作爲你的代碼結構,你應該去UJS。

+0

我需要根據rails布爾操作回調。它加載了不同的模式,沒有URI更改。 – Peege151 2014-12-08 07:04:49

+0

你可以使用UJS來做到這一點。您必須位於與此回撥關聯的某個控制器上。 'someaction.js.erb' – 2014-12-08 07:14:35

+0

明天我會有一些閱讀。 ;) – Peege151 2014-12-08 07:15:53

0

不知道,這是一個理想的解決方案。

您已經設置了ensure_service_agreement方法中的值。

使用渲染文件中像ensure_service_agreement.js.erbensure_service_agreement.html.erb

,並保持在輸入標籤值。在js文件

<input name='' id='tos' value = '<%= @tos %>'> use type hidden or style with display:none 

和訪問像

var tos = $('#tos').val(); 
+0

我想操縱從基於我的布爾jquery庫的回調,我沒有提交表單。沒有輸入標籤。 – Peege151 2014-12-08 07:15:11

+0

創造一個沒有傷害.. – Nithin 2014-12-08 07:17:26

1

我用坤寶石。

步驟:

gemfile.rb

gem 'gon' 

application.html.erb

<%= include_gon %> 

回到我application_controller.rb

def ensure_service_agreement 
if current_user.agrees_to_service == true 
    @tos = true 
    gon.tos = true 
else 
    @tos = false 
    gon.tos = false 
end 
end 

,最後我的JS

dayClick: function(date, allDay, jsEvent, view) { 
    if(gon.tos == true) { 
       $('.booking.modal').modal('show'); 
       console.log(date) 
    } else { 
       $('.tos.modal').modal('show'); 
    } 
}