在我的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了解我的实例变量?
答案 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.erb
或ensure_service_agreement.html.erb
并将值保留在输入标记中。
<input name='' id='tos' value = '<%= @tos %>'> use type hidden or style with display:none
并在Js文件中访问
var tos = $('#tos').val();