Есть ли метод уничтожения для FlexSlider

Я пытаюсь повторно инициализировать FlexSlider без обновления страницы, когда новый список галереи вызывается асинхронно.

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

Есть ли способ уничтожить, а затем перестроить галерею?

Спасибо

function flexInit() {
        $('.flexslider').flexslider({
            animation: "slide",
            controlsContainer: ".paginator",
            manualControls: 'a',
            after: function(slider){
                if(slider.atEnd == true)    {
                    // ??? slider.destroy;
                    galBuild();
                }
            }
        });
    }

    function galBuild() {
            $.getJSON("/gallery/next/"+galID, function (data) {
            var results = data.objects;
            var list = $(".flexslider ul.slides");
            var i = 0;
            $.each(results, function () {

                list.append('<li><p>' + results[i].title + '</p><img src="' + results[i].src + '"><p class="flex-caption">' + results[i++].caption + '</p></li>');

            });

            flexInit(); 

            });
    }

    galBuild();
 rob - not a robber28 июн. 2012 г., 18:31
Привет, Кундан ... galID - это просто глобальная переменная галереи, объявленная ранее. Не имеет никакого отношения к повторной инициализации FlexSlider
 Kundan Singh Chouhan28 июн. 2012 г., 18:19
откуда "galID" аргумент передан в функции galBuild ()?

Ответы на вопрос(3)

Самый простой способ - удалить flexscroll из набора данных элементов.

function flexInit() {
    $('.flexslider').flexslider({
        animation: "slide",
        controlsContainer: ".paginator",
        manualControls: 'a',
        after: function(slider){
            if(slider.atEnd == true)    {
                slider.addSlide(galBuild());
            }
        }
    });
}
//this remove flexslider form element dataset
$('.flexslider').removeData("flexslider");

и теперь вы можете звонить

flexInit();

и ваш flexslider будет воссоздан.

Роб я исследовал это и найти решение

Вы должны изменить свои функции, как это

function flexInit() {
    $('.flexslider').flexslider({
        animation: "slide",
        controlsContainer: ".paginator",
        manualControls: 'a',
        after: function(slider){
            if(slider.atEnd == true)    {
                slider.addSlide(galBuild());
            }
        }
    });
}


function galBuild() {
   $.getJSON("/gallery/next/"+galID, function (data) {
    var results = data.objects;
    var i = 0;
    $.each(results, function () {
       return ('<li><p>' + results[i].title + '</p><img src="' + results[i].src + '"><p class="flex-caption">' + results[i++].caption + '</p></li>');
    });

   });
}

flexInit();

Также вам нужно сделать некоторые косметические изменения в файле flexSlider.js вslider.update функция. сейчас не проверяется переменная позиции, если она приходитundefinedтак что вам придется это проверить.

 rob - not a robber28 июн. 2012 г., 20:48
Кундан ... ты определенно ведешь меня по правильному пути сюда. Благодарю. Когда снова вызывается FlexSlider, область управления выходит из строя, пытаясь выполнить настройку, и я получаю ошибку стека $ .flexslider.methods.controlNav.update $ .flexslider.slider.update. Я буду держать вас в курсе моих достижений
Решение Вопроса

я использую другой подход, т.е.

Вы запустили один флекс-слайдер:

    $('#element).flexslider({
      animation: "slide",
      controlNav: false,
      directionNav: true
    });

Когда я хочу изменить слайды в ранее созданном слайдере и перезапустить его, я делаю следующее:

creating temporaty div:

$('#element).before('
    <div id="element_temp" class="flexslider"></div>
');

delete div with previously created slider

$('#element).remove();

insert new list of slides into temporary div:

var html = `
<ul class='slides">
<li><img src="link to image" /></li>
<li><img src="link to image" /></li>
<li><img src="link to image" /></li>
</ul>`;
$('#element_temp').html(html);

start flexslider on temp div

$('#element_temp').flexslider({
  animation: "slide",
  controlNav: false,
  directionNav: true
});

change div ID from element_temp to element

$('#element_temp').attr('id','element');

и это работает с несколькими flexliders

 14 янв. 2013 г., 18:21
Спасибо! Это неудачный FlexSlider не обеспечивает простой способ «сброса». слайдер Это решение, кажется, работает хорошо, хотя.
 09 янв. 2013 г., 23:05
это было очень полезно - мне не нужно было менять идентификатор в конце, хотя это исказило начальную точку моего ползунка, но я оценил информацию

Ваш ответ на вопрос