JQuery UI вкладки выберите необходимую помощь. Могу ли я отменить действие? - PullRequest
0 голосов
/ 05 июля 2011

Я использую следующую функцию для обновления вкладок в виджете вкладок 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.Мой вопрос заключается в том, что я бы хотел, чтобы только первая вкладка Select фактически инициировала вызов на сервер.2-я tabSelect предназначена для показа вкладки.Я понимаю, что это немного взломать.Другие элементы управления на странице влияют на состояния вкладок, и в определенном случае вкладка уже была выбрана, поэтому первый вызов не обновлял ее содержимое, поэтому я сделал ее разборной, выберите ее (что фактически отменяет ее выбор), установитесворачивается в ложь, затем выбирается вкладка (это запускает обновление правильно).В любом случае клиенту нравится текущее поведение, за исключением того, что я вижу, что сервер вызывается дважды.Я попытался разбить цепочку на две части и установить между ними логическую переменную, а затем проверить ее при принятии решения об обновлении вкладок.Я не совсем получил то поведение, которое хотел.Кто-нибудь может указать мне правильное направление здесь?Опять же, я не хочу вызывать сервер, если в этом нет необходимости.Мне бы хотелось решение, которое не требует изменения функции updateTheTabs.Большое спасибо за любые советы или подсказки.

Приветствия,
~ СК в Сан-Диего

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Возможно, проще всего использовать глобальную переменную, чтобы отслеживать, была ли загружена вкладка.Затем в beforeLoad проверьте, загружены ли вкладки.Если нет, загрузите его, иначе просто покажите.В приведенном ниже примере кода обязательно измените «my-tab», чтобы он соответствовал заголовку в 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();
  }

});
1 голос
/ 06 июля 2011

Я не уверен, что получил то, что вы хотели сделать, но на предложение "... кроме того, что я вижу, что сервер вызывается дважды", я предполагаю, что вы хотите кэшировать содержимое вкладки.

Вы можете попытаться установить для параметра cache значение true при открытии вкладок:

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