2011-07-05 44 views
0

我正在使用以下函數更新jQuery ui選項卡窗口小部件上的選項卡。jQuery ui選項卡選擇需要的幫助。我可以取消行動嗎?

function updateTheTabs(select, disable) { 
    var selectIdx = vehicleSelectorControl.tabIndexByName(select); 
    $tabs.tabs('option', 'disabled', []) 
     .tabs('option', 'disabled', convertToTabIndices(disable)) 
     .tabs('option', 'collapsible', true) 
     .tabs('select', selectIdx) 
     .tabs('option', 'collapsible', false) 
     .tabs('select', selectIdx);  
} 

我正在切換「可摺疊」選項以實現客戶所需的行爲。我還更新了tabSelect上的選項卡的內容。我的問題是我只會喜歡第一個tabSelect實際觸發到服務器的呼叫。第二個tabSelect只是爲了顯示標籤。我意識到這有點破解。頁面上的其他控件會影響選項卡狀態,並且在某些情況下,選項卡已被選中,因此第一個調用並未更新其內容,因此我將其設置爲可摺疊狀態,選擇它(實際上取消選擇它),設置可摺疊爲假,然後選擇選項卡(這會正確觸發更新)。無論如何,客戶端喜歡當前的行爲,除了我可以看到服務器被調用兩次。我試圖將鏈分成兩部分,然後設置一個布爾變量,然後在決定更新選項卡時檢查它。我沒有完全得到我想要的行爲。任何人都可以在這裏指出我正確的方向嗎?同樣,如果沒有必要,我不想調用服務器。我想要一個不需要更改'updateTheTabs'功能的解決方案。非常感謝任何建議或提示。

歡呼聲中,在聖地亞哥
〜CK

回答

0

我不知道我得到了你想要做什麼,而是來了句「......除了我可以看到服務器被稱爲兩次」 ,我認爲你想要緩存標籤的內容。

你可以試試,當你啓動的選項卡的cache選項設置爲true

$tabs.tabs({cache: true}); 
1

這可能是最簡單的,只需使用一個全球跟蹤的標籤是否已被加載。然後在beforeLoad中,檢查標籤是否已加載。如果沒有,加載它,否則只顯示它。在下面的示例代碼,一定要更改「我的標籤」,以匹配在HTML的標題,即<a href="whateverurl" title="my-tab">My Tab</a>

var tabLoaded = false; 

$("#tabs").tabs({ 

beforeLoad: function(event, ui) { 
    if($(ui.panel).attr('id') == 'my-tab' && tabLoaded) { 
    event.preventDefault(); 
    } 

}); 
+0

不要忘記tabLoaded設置爲true時首先加載的標籤 – rgbworld