- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个由 DataTables 1.10 驱动的表。过滤已打开。当我在下面谈论“做搜索”时,我指的是使用该表的过滤功能。
关闭 stateSave
一切正常。但是,当 stateSave
打开时,会发生以下情况:
Alice 以管理员身份登录。因为 admin 拥有所有权限,所以当她搜索文章时,她可以看到所有文章。因为有些文章已发表而有些未发表,所以该表有一列显示哪些已发表,哪些未发表。到目前为止一切顺利。
Bob,一个随机用户,访问了这个网站。随机用户永远看不到未发布的文章,因此该表隐藏了显示发布状态的列。到目前为止一切顺利。
Alice 注销。她现在像一个随机用户一样访问该站点。所以她应该看到 Bob 所看到的。但是,当她进行搜索时,她仍然看到指示发布状态的列。
(注意:我在这里讨论的问题纯粹是用户界面之一。服务器确保非特权用户永远无法获得未发表文章的记录。问题是额外的列为非特权用户提供他们不需要的信息。他们只能在搜索中看到已发布的文章,因此他们不需要看到他们在搜索中获得的每篇文章都已发布。)
配置数据表的代码通过执行如下操作隐藏发布列:
var columnDefs = [];
if (!privileged) {
columnDefs.push({
targets: [1],
orderable: false,
visible: false
});
}
columnDefs
作为 columnDefs
选项传递给 DataTables。
问题是 DataTables 将列可见性之类的东西存储到它保存到 localStorage
中的状态中。因此,当 Alice 注销并以非特权用户身份再次进行搜索时,即使 columnDefs
的值是正确的,它也会被保存的状态覆盖。该状态是在 Alice 是管理员时存储的,它声明发布列是可见的,因此即使 Alice 以非特权用户身份访问网站时它仍然可见。
我想要的是让用户从保存的状态中受益,但避免在用户权限更改时保留此状态。
注意事项:
我不想使用 sessionStorage
,因为我希望状态在浏览器关闭之间保持不变,但 sessionStorage
在浏览器关闭时被清除。
我无法使用服务器分配的 session cookie 来检测登录和注销,因为它只是 HTTP。此外,特权可能会因其他原因而改变。
我不想任意设置保存状态的过期时间。
最佳答案
我确定的解决方案是在保存的数据中使用一个附加字段来了解我关心的条件何时发生了变化。该字段的值会根据用户当前 拥有的权限而变化。例如,因为在我在这里描述的情况下,我决定根据名为 priviledged
的变量(根据服务器提供的数据初始化)来隐藏或显示一列,它可以是简单如:
var token = privileged;
然后我设置stateSaveParams
来记录保存状态时的token:
stateSaveParams: function (settings, data) {
data.myapp_token = token;
}
前缀 myapp_
只是为了避免与 DataTable 自己的字段发生冲突。
我设置了stateLoadParams
,这样如果token
的当前值与之前记录的不同,状态就会被清除:
stateLoadParams: function (settings, data) {
if (data.myapp_token !== token) {
this.api().state.clear(); // Clears the state.
return false; // Tells DataTables to not use the state that was stored.
}
// This return is here to keep the IDE happy but does not do anything special.
return undefined;
},
在此示例中,我刚刚将 token
设置为我在问题 (privileged
) 中显示的单一条件,但在生产中我使用了变量组合加上一个本地版本号,这样如果我做一些需要清除状态但不能像特权更改一样被检测到的事情,我可以根据需要增加 token 的值。
关于datatables - 如何防止 DataTables 根据过时的保存状态显示或隐藏列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245150/
代码如下: http://jsfiddle.net/t2nite/KCY8g/ 我正在使用 jquery 创建这些隐藏框。 每个框都有一些文本和一个“显示”和“隐藏”按钮。我正在尝试创建一个“显示/隐
我正在尝试做某事。如果单击一个添加 #add-conferance 然后菜单将显示.add-contact。当点击隐藏然后它显示隐藏。我也将 setTimeout 设置为 7sec,但我希望当我的鼠标
我有一个多步骤(多页?)表单,只要用户按下“下一步”或“上一步”按钮,表单字段就会通过 div 显示和隐藏。 我只想禁用第一个 div (div id="page1"class="pageform")
我有一个使用 IIS 6 和 7 的当前系统,用 ASP.NET 和 .NET 4 中的 C# 编写。 My purpose is to hide the url completely (as per
我正在建立一个网站,并有一个幻灯片。幻灯片有标题和索引,覆盖整个页面。当覆盖被激活时,标题需要消失。当覆盖层被停用时,通过单击退出按钮、缩略图链接或菜单链接,字幕必须返回。 这就是我目前所拥有的
我正在尝试为显示/隐藏功能制作简单的 jquery 代码。但我仍然做错了什么。 $(document).ready(function(){ $('.arrow').click(function
我有一个自定义对话框并使用它来代替 optionMenu。所以我希望 myDialog 表现得像菜单,即在按下菜单时显示/隐藏。我尝试了很多变体,但结果相同: 因为我为 myDialog 设置了一个
在我的项目中,我通过 ViewPager 创建我的 tabBar,如下所示: MainActivity.java mViewPager = (ViewPager) findViewById(R.id.
我目前正在使用一个 Excel 表,我将第 1-17 行分组并在单元格 B18 中写入了一个单元格值。我想知道当我在展开/折叠行时单击 +/- 符号时是否有办法更改 B18 中的值。 例如:我希望 B
我想创建一个按钮来使用 VBA 隐藏和取消隐藏特定组。我拥有的代码将隐藏或取消隐藏指定级别中的所有组: Sub Macro1() ActiveSheet.Outline.ShowLevels RowL
我是 VBA 新手。我想隐藏从任何行到工作表末尾的所有行。 我遇到的问题是我不知道如何编程以隐藏最后写入的行。 我使用下一个函数知道最后写入的单元格,但我不知道在哪里放置隐藏函数。 last = Ra
我想根据另一个字段的条件在 UI 上隐藏或更新一个字段。 例如,如果我有一个名为 Color 的字段: [PXUIField(DisplayName="Color")] [PXStringList("
这是我尝试开始收集通常不会遇到的 GCC 特殊功能。这是@jlebedev 在另一个问题中提到g++的“有效C++”选项之后, -Weffc++ This option warns about C++
我开发了一个 Flutter 应用程序,我使用了 ProgressDialog小部件 ( progress_dialog: ^1.2.0 )。首先,我展示了 ProgressDialog小部件和一些代
我需要在 API 17+ 的同一个 Activity(Fragment) 中显示/隐藏状态栏。假设一个按钮将隐藏它,另一个按钮将显示它: 节目: getActivity().getWindow().s
是否可以通过组件的 ts 代码以编程方式控制下拉列表的显示/隐藏(使用 Angular2 清楚)- https://vmware.github.io/clarity/documentation/dro
我想根据 if 函数的结果隐藏/显示 NiceScroll。 在我的html中有三个部分,从左到右逐一滚动。 我的脚本如下: var section2 = $('#section2').offset(
我有这个 jquery 代码: $(document).ready(function(){ //global vars var searchBoxes = $(".box"); var searchB
这个问题已经有答案了: Does something like jQuery.toggle(boolean) exist? (5 个回答) 已关闭 6 年前。 在 jQuery 中(我当前使用的是 1
我在这样的选择标签上使用 jQuery 的 selectMenu。 $('#ddlReport').selectmenu() 在某些情况下我想隐藏它,但我不知道如何隐藏。 这不起作用: $('#ddl
我是一名优秀的程序员,十分优秀!