Вкладки Jquery-UI: двойная загрузка вкладки по умолчанию - PullRequest
1 голос
/ 07 мая 2010

Я использую jqueryui-tabs для отображения интерфейса с вкладками. вот как выглядит моя разметка в MasterPage :

<div id="channel-tabs" class="ui-tabs">
    <ul class="ui-tabs-nav">
        <li><%=Html.ActionLink("Blogs", "Index", "Blog", new { query = Model.Query, lang = Model.SelectedLanguage, fromTo = Model.FromTo, filters = Model.FilterId }, new{ title="Blog Results" }) %></li>
        <li><%=Html.ActionLink("Forums", "Index", "Forums", new { query = Model.Query, lang = Model.SelectedLanguage, fromTo = Model.FromTo, filters = Model.FilterId }, null) %></li>
        <li><%=Html.ActionLink("Twitter", "Index", "Twitter", new { query = Model.Query, lang = Model.SelectedLanguage, fromTo = Model.FromTo, filters = Model.FilterId }, null) %></li>
    </ul>

   <div id="Blog_Results">
        <asp:ContentPlaceHolder ID="ResultPlaceHolder" runat="server">
        </asp:ContentPlaceHolder>
    </div>

Если контент загружается через ajax, я возвращаю частичное представление с содержимым вкладки. Если содержимое загружается напрямую, я загружаю страницу, которая включает содержимое в ContentPlaceHolder.

примерно так:

<asp:Content ID="Content2" ContentPlaceHolderID="BlogPlaceHolder" runat="server">
    <%=Html.Partial("Partial",Model) %>
</asp:Content>

//same goes for the other tabs.

Имея это, я получаю доступ к URL-адресу "/ Forums". Сначала он загружает содержимое форума на вкладку Blog, запускает загрузку ajax на вкладке Blog и заменяет содержимое содержимым блога.

Я пытался поместить различный заполнитель для каждой вкладки , но это тоже не все исправило, так как при загрузке "/ Форумы" он обязательно загрузит вкладку форума, но откроется вкладка Блог первый.
Кроме того, при использовании отдельных заполнителей, если я загружаю URL-адрес «/ Blogs», он сначала статически загружает содержимое в заполнитель содержимого блога, а затем инициирует вызов ajax, чтобы загрузить его во второй раз и заменить. Если я просто свяжу вкладку с хэштегом, то при загрузке вкладок форума я не получу содержимое блога ...

Как бы вы достигли ожидаемого поведения? Я чувствую, что у меня может быть более глубокая проблема в организации моих взглядов. Является ли размещение вкладок на главной странице способом? Может быть, я должен просто перехватить ссылки вручную и не полагаться на вкладки jquery-ui, чтобы сделать работу за меня.

Я не могу загрузить все вкладки по умолчанию и отобразить их с помощью хеш-тегов, мне нужна загрузка ajax, потому что это процесс поиска, который может быть длинным.

Итак, подведем итог:

  • / Форум должен загрузить вкладку форума и позволить другим вкладкам загружаться с помощью вызова ajax при нажатии на нее.
  • / Twitter должен загрузить вкладку Twitter и разрешить другим вкладкам ....
  • то же самое относится к / Blogs и любым вкладкам, которые я добавлю позже.

Есть идеи, чтобы это работало правильно?

1 Ответ

1 голос
/ 11 мая 2010

Вот как я решил проблему с двойной загрузкой, когда использовал вкладки на главной странице и загружал заполнитель содержимого в каждую из них, чтобы я мог попасть на каждую вкладку с различным URL:

 $(function () {
        var first = true;
        var $tabs = $("#channel-tabs").tabs(
                        {
                            ajaxOptions: {
                                beforeSend: function (xhttp) {
                                    if (first) return false;
                                },
                                error: function (xhr, status, index, anchor) {
                                    $(anchor.hash).html("Couldn't load this tab. " + xhr.responseText);
                                }
                         },
                         select: function (event, ui) {
                                first = false;
                         },
                         cache: true,
                        });
    });

Когда страница загружается, я отменяю запрос Ajax, если это происходит впервые, я снова включаю его при первом выборе вкладки.

Это не так чисто, как хотелось бы, но хорошо справляется.

...