我如何设置一个会话变量从js在haml在ruby on rails
How can I set a session variable from a js inside haml in ruby on rails?
我有表行阴影(组的行)通过js。
我想通过会话变量来记住阴影。
我正在使用的haml部分有:
Group Shading:
%a{:href => '#', :id => 'row_colors_on'}
On
%a{:href => '#', :id => 'row_colors_off'}
Off
js有:
$(function(){
$("a#row_colors_on").click(function(){
$(".row_color_group_1").addClass("color_group_1");
$(".row_color_group_2").addClass("color_group_2");
$(".row_color_group_3").addClass("color_group_3");
<%- session.group_shading = 'true' %>
event.preventDefault();
});
});
$(function(){
$("a#row_colors_off").click(function(){
$(".row_color_group_1").removeClass("color_group_1");
$(".row_color_group_2").removeClass("color_group_2");
$(".row_color_group_3").removeClass("color_group_3");
<%- session.group_shading = 'false' %>
});
});
则使用:
- row_bg_color_group = 'row_color_group_1'
- for link in @links
- construct_hyperlink(link.url_address, link.alt_text)
- if link.group.group_name != (current_group ||= '')
- display_group = current_group = link.group.group_name
- row_bg_color_group = rotate_rows_color_group
- else
- display_group = ''
%tr{:class => "#{row_bg_color_group}"}
更改行背景颜色的代码确实做到了,但在通过会话变量刷新页面后不记得了吗?
与帮助器:
def rotate_rows_color_group
if session[:group_shading] == 'true'
cycle('row_color_group_1', 'row_color_group_2', 'row_color_group_3')
else
'row_color_group_1'
end
end
但我总是得到'else'条件,即session[:group_shading]
没有被设置或识别
css
.color_group_1 { background-color: #133333; }
.color_group_2 { background-color: #122222; }
.color_group_3 { background-color: #111111; }
你不能在javascript中使用动词语句,它在发送给客户端之前被解析。使用javascript sessionStorage
:
$(function(){
$("a#row_colors_on").click(function(){
$(".row_color_group_1").addClass("color_group_1");
$(".row_color_group_2").addClass("color_group_2");
$(".row_color_group_3").addClass("color_group_3");
sessionStore.setItem('group_shading', true);
event.preventDefault();
});
});
$(function(){
$("a#row_colors_off").click(function(){
$(".row_color_group_1").removeClass("color_group_1");
$(".row_color_group_2").removeClass("color_group_2");
$(".row_color_group_3").removeClass("color_group_3");
sessionStorage.setItem('group_shading', false);
});
});
$(document).ready(function() {
if (sessionStorage.getItem('group_shading'))
$("a#row_colors_on").click();
});
重要提示:
但是,请注意js会话与rails会话不同。Rails会话可以存储在不同的地方,javascript无法访问它。这意味着您不能在服务器端访问这些值。有两种解决方案:1)使用sessionStorage并在页面加载后根据存储值执行一些javascript(如上所述)。
2)不使用sessionStorage,而是向服务器发送一个ajax请求来填充rails会话(推荐)。您可以使用cookie在Javascript(客户端)和Rails(服务器端)之间共享状态。你可以通过Javascript在视图中设置cookie(查看js-cookie库),并在Rails控制器中读取cookie。
使用js-cookie库,您可以设置一个cookie:(Cookie.set('awesome', 'sauce')
),然后在Rails控制器(puts cookies['awesome']
)中读取它。
相关文章:
- Ruby/JS如何在提交按钮后重新加载页面
- 使用Ruby数组使用JS在视图中进行迭代和显示
- 在Sinatra(ruby)中实现JS模糊搜索
- 如何使用 Ruby 在 Javascript (js.erb) 中设置 url
- 如何将.js从视图移动到单独的资产 - Ruby On Rails
- 如何在Ruby on Rails中集成Arbor.js
- 如何判断字符串中字母的索引?(在Python、JS、Ruby、PHP等中)
- 如何将ruby on rails数据馈送到d3.js中
- 如何在ruby on rails中保存和发布Webgl中的JS代码结果
- 有没有一种方法可以让Ruby在提供.js文件之前对其进行编辑
- ruby Mustache.render没有像JS Mustache.render这样的部分的第三个参数
- 在application.js中使用嵌入式ruby
- 椭圆曲线加密与JS中的SJCL和Ruby中的OpenSSL
- 如何使从数据库获取的 Ruby 代码在 JS 中工作
- Ruby on Rails 在 js.erb 中渲染 json
- Angular.js integration with Ruby On Rails Forms
- 如何将计算值绑定到 Angular 中的 ng-model 字段.js以便我可以使用 Ruby on Rails 将完整
- 避免HTML请求,只在rails上调用js-ruby
- JS / Ruby AES 256 symmetry
- 如何使用Asana' JS/Ruby库连接Asana' API