使用rails实例变量为javascript条件

时间:2014-12-08 06:44:23

标签: javascript ruby-on-rails

在我的application_controller中。

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了解我的实例变量?

3 个答案:

答案 0 :(得分:1)

我使用了gon gem。

步骤:

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');
    }
}

答案 1 :(得分:0)

您正试图在js文件中操纵rails代码。但是你不会在那里得到任何erb语法。

解决此类请求有多种解决方案。如果您要提交表单或重定向到某个网址,那么您可以使用ujs执行此操作(使用:remote => true)。

UJS在.js.erb文件中回复你可以访问js和erb语法。

如果您没有提交或没有更改网址,那么您只需使用jquery即可轻松完成此操作。喜欢

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

作为你的代码结构你应该去UJS。

答案 2 :(得分:0)

不确定,这是一个理想的解决方案。

您已在ensure_service_agreement方法中设置了值。

使用ensure_service_agreement.js.erbensure_service_agreement.html.erb

等渲染器文件

并将值保留在输入标记中。

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

并在Js文件中访问

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