JQuery UI Tabs缓存

我在ASP .net MVC应用程序中工作。 我有一个JQuery UI选项卡,其Javascript启用缓存如下。

function LoadStudentDetailTabs() { $('#tabStudentDetail').tabs({ cache: true, spinner: '', select: function(event, ui) { $("#gridSpinnerStudentDetailTabs h5").text("Loading Details..."); $('#tabStudentDetail > .ui-tabs-panel').hide(); $("#gridSpinnerStudentDetailTabs").show(); }, load: function(event, ui) { $("#gridSpinnerStudentDetailTabs").hide(); $('#tabStudentDetail > .ui-tabs-panel').show(); }, show: function(event, ui) { $("#gridSpinnerStudentDetailTabs").hide(); $('#tabStudentDetail > .ui-tabs-panel').show(); } }); } 

我使用list1,tab2,tab3列表构建了三个标签项。

现在发生的事情是,当标签被构造时,它为所有标签项启用了cahing。 但是,如何根据需要单独设置缓存到这些选项卡项。 说(tab1缓存,tab2没有缓存,tab3缓存)我只能看到一种方法将缓存应用于整个选项卡,而不是根据需要将缓存应用于单个选项卡项。

我还需要动态地启用或禁用对这些选项卡项(tab1,tab2,tab3)的缓存。 我怎样才能做到这一点。 任何帮助,将不胜感激?

我最近也有这个用途。 查看代码,它使用带有$ .data的 “cache.tabs”来确定是否应该缓存选项卡。 所以你只需要抓取元素,并设置$.data(a, "cache.tabs", false);

假设标签是静态的,我创建了一个快速扩展来做到这一点。 可能存在不可预见的问题,并且肯定可以改进。

 (function($) { $.extend($.ui.tabs.prototype, { _load25624: $.ui.tabs.prototype.load, itemOptions: [], load: function(index) { index = this._getIndex(index); var o = this.options, a = this.anchors.eq(index)[0]; try { if(o.itemOptions[index].cache === false) $.data(a, "cache.tabs", false); } catch(e) { } return this._load25624(index); } }); })(jQuery); 

正如您所看到的,我将旧的load方法分配给_load25624 ,只是一些随机名称,将其保留为对象的成员,并在确定是否应该缓存选项卡后在新的load方法中调用它。 用法:

 $("#tabs").tabs({ cache: true, itemOptions: [ { cache: false } ] }); 

将打开整个项目集的缓存,并关闭第一项(索引0)的缓存。

因此,简化Eric的分析,您可以通过在每个选项卡的锚元素中设置’cache.tabs’数据来控制每个选项卡的缓存。

 // disable cache by default $("#tabs").tabs({ cache: false, }); 

然后,在第一次加载选项卡内容后,您可以为该选项卡启用缓存。 我只想把它放在$(document).ready

 $(document).ready(function () { // cache content for the current tab var currentTabIndex = $("#tabs").tabs('option', 'selected'); var currentTabAnchor = $("#tabs").data('tabs').anchors[currentTabIndex]; $(currentTabAnchor).data('cache.tabs', true) }); 

谢谢,埃里克!

试试这个

 $(document).ready(function(){ $("#tabs").tabs({ spinner: 'Loading...', cache: false, ajaxOptions: {cache: false} }); }); 

在IE中,以上都不适用于我。 我不得不放

 [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 

在页面级别,而不是Ajax方法(适用于Chrome)

所以:

 [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] public ViewResult MyPage() { } 

以及:

 [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] public JsonResult MethodCalledByAjax() { }