2010-04-12 22 views
8

मैं एक एएसपी .net एमवीसी अनुप्रयोग में काम कर रहा हूं। मेरे पास एक JQuery UI टैब है जिसका जावास्क्रिप्ट कैशिंग सक्षम करने के लिए निम्नानुसार है।JQuery UI टैब कैशिंग

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

मैंने एक टैब का उपयोग करके टैब टैब, टैब 2, टैब 3 का उपयोग करके तीन टैब आइटम बनाए।

अब क्या होता है जब टैब का निर्माण होता है तो यह सभी टैब आइटम्स के लिए कैहिंग सक्षम बनाता है। लेकिन मैं व्यक्तिगत रूप से आवश्यकतानुसार इन टैब आइटम्स को कैशिंग कैसे सेट कर सकता हूं। कहें (टैब 1 कैश, टैब 2 कैश, टैब 3 कैश) मैं केवल आवश्यक टैब आइटम्स को कैशिंग लगाने के बजाय पूरे टैब पर कैशिंग लागू करने का एक तरीका देख सकता हूं।

गतिशील रूप से इन टैब आइटम्स (टैब 1, टैब 2, टैब 3) में कैशिंग को सक्षम या अक्षम करने की आवश्यकता भी है। इसे कैसे प्राप्त किया जा सकता है। किसी भी सहायता की सराहना की जाएगी?

उत्तर

9

मैंने हाल ही में इसके लिए भी उपयोग किया था। कोड में देखकर, यह निर्धारित करने के लिए कि कोई टैब कैश किया जाना चाहिए, यह $.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); 

आप मैं _load25624 करने के लिए पुराने load विधि निर्दिष्ट करते हैं, सिर्फ कुछ यादृच्छिक नाम, वस्तु के एक सदस्य के रूप में यह ध्यान में रखते हुए देख सकते हैं, और यह तय करने के बाद नई load विधि में इसे कहते है, तो टैब के रूप में होना चाहिए कैश की गई। उपयोग:

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

आइटम के पूरे सेट के लिए कैश भी चालू हो जाएगा, और सिर्फ पहला आइटम (सूचकांक 0) के लिए कैश बंद कर देते हैं।

5

तो, एरिक के विश्लेषण को सरल बनाते हुए, आप प्रत्येक टैब के एंकर तत्व में '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) 
}); 

धन्यवाद, एरिक!

2

ऊपर IE में मेरे लिए काम किया की इस

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

कोई नहीं की कोशिश करो।

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

साथ ही:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
public JsonResult MethodCalledByAjax() 
{ 
} 
मैं नहीं बल्कि अजाक्स विधि (जो क्रोम के लिए काम किया)

तो पर से पेज स्तर पर

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

डाल करने के लिए, था

संबंधित मुद्दे