Аккордеон пользовательского интерфейса jQuery при инициализации при последующих вызовах после первого

Шаг 1: Загрузите веб-страницу с div «foo» и шаблоном jqote2 «tmpl_foo» (jqote2 — это система шаблонов на основе jQuery).

<div id="foo"></div>

<script type="text/x-jqote-template" id="tmpl_foo">
    <![CDATA[
    <% for (i in this.bar) { %>
            <h3><%= this.bar[i].title %></h3>
            <div class="pane"><%= this.bar[i].desc %></div>
    <% } %>
    ]]>
</script>

Шаг 2: Запустите ajax-запрос через jQuery для получения данных с сервера, заполните div «foo» с помощью jqote2 и инициализируйте аккордеон пользовательского интерфейса jQuery на «foo».

var get_foo : function () {
    $.ajax({
        url     : url,
        type    : "GET",
        data    : "",
        dataType: "json",
        error   : function() { alert("Error loading html document"); },
        success : function(res) {
            $("#foo").empty().append(
                $('#tmpl_foo').jqote({
                'bar': res.bar
                }) 
            ).accordion();
        }
    });
}

$(document).ready(function() {
    get_foo();
});

Это прекрасно работает.

На веб-странице у меня также есть другие ссылки, такие как «предыдущая страница» и «следующая страница» (стандартная функциональность пейджера), которые также активируют get_foo(). Эти действия также приводят к правильному получению новых данных, и новые результаты также правильно вставляются в "foo". Однако по какой-то причине аккордеон не инициализируется. Я в тупике. В чем может быть причина?


person punkish    schedule 25.05.2011    source источник


Ответы (1)


Сначала вы должны сбросить аккордеон:

        $("#foo").empty().append(
            $('#tmpl_foo').jqote({
            'bar': res.bar
            }) 
        ).accordion('destroy').accordion();

Вам может понадобиться вычислить текущий элемент аккордеона, если вы хотите сохранить это состояние.

person John Green    schedule 25.05.2011
comment
Потрясающий. Большое спасибо, что не позволили мне тратить больше времени на это. - person punkish; 25.05.2011