Не корректно выводится слайдер через AjaxSnippet
        Добрый день!
Не корректно выводится слайдер при загрузке через AjaxSnippet. Без AjaxSnippet все работает и отображается как положено. Подскажите пожалуйста решение.
Вывожу так:
    
    
    
                                                                                
            Не корректно выводится слайдер при загрузке через AjaxSnippet. Без AjaxSnippet все работает и отображается как положено. Подскажите пожалуйста решение.
Вывожу так:
[[!AjaxSnippet?
    &snippet=`pdoResources`
    &resources=`getTickets`
    &parents=`1893` 
    &limit=`10` 
    &includeTVs=`image`
    &tpl=`tpl.gallery.big`
]]На выходе получаю это:
    Комментарии: 9
                Полагаю, что инициализация слайдера происходит в основном DOM -дереве, при событии document.ready. А тело слайдера грузится позже. Соответственно, скрипт инициализации не видит подгруженную разметку слайдера, ее просто нет в основном DOM-е.            
                    
                bezumkin.ru/sections/components/2557/
Тут указано, что есть событие as_complete, которое происходит при загрузке ajaxSnippet. Попробуйте на это событие повесить инициализацию слайдера.
                    Тут указано, что есть событие as_complete, которое происходит при загрузке ajaxSnippet. Попробуйте на это событие повесить инициализацию слайдера.
$(document).on('as_complete', document, function(e,d) {
	//код инициализации
});            
                К сожалению не помогло
                    $(document).on('as_complete', document, function(e,d) {
    slider_demo2.slick({
	slidesToShow: 1,
	slidesToScroll: 1,
	arrows: false,
	fade: true,
        asNavFor: '.slider_demo1'
    });
});            
                Ошибки есть в консоли браузера?            
                    
                Ошибок нет            
                    
                переменная slider_demo2 должна объявляется внутри этого кода, иначе slider_demo2 наверняка пустая.            
                    
                Так выглядит вся инициализация главного слайдера и зависимого:
                    if ($('.slider_demo2').length > 0) {
            var slider_demo2 = $('.slider_demo2');
            var slider_demo1 = $('.slider_demo1');
			
			$(document).on('as_complete', document, function(e,d) {
				slider_demo2.slick({
					slidesToShow: 1,
					slidesToScroll: 1,
					arrows: false,
					fade: true,
					asNavFor: '.slider_demo1'
				});
			});
			
            slider_demo1.slick({
                slidesToShow: 7,
                slidesToScroll: 1,
                asNavFor: '.slider_demo2',
                dots: false,
                prevArrow: "<div class='slider_arrow arrow_left'><i class='fal fa-angle-left'></i></div>",
                nextArrow: "<div class='slider_arrow arrow_right'><i class='fal fa-angle-right'></i></div>",
                centerMode: true,
                focusOnSelect: true,
                responsive: [{
                    breakpoint: 10000,
                    settings: {
                        slidesToShow: 7,
                        slidesToScroll: 1,
                        infinite: true,
                    }
                }, {
                    breakpoint: 1300,
                    settings: {
                        slidesToShow: 6,
                        slidesToScroll: 1,
                        infinite: true,
                    }
                }, {
                    breakpoint: 1024,
                    settings: {
                        slidesToShow: 7,
                        slidesToScroll: 1,
                        infinite: true,
                    }
                }, {
                    breakpoint: 600,
                    settings: {
                        slidesToShow: 3,
                        slidesToScroll: 1
                    }
                }, {
                    breakpoint: 480,
                    settings: {
                        slidesToShow: 2,
                        slidesToScroll: 1
                    }
                }]
            });
        }            
                Поясняю
var slider_demo2 = $('.slider_demo2');
var slider_demo1 = $('.slider_demo1');
эти две строчки как бы принимают объекты, но т.к. у вас из-за ajaxsnippet нет объектов $('.slider_demo2'); и $('.slider_demo1'); их физечески не существует при загрузке страницы, то переменные пусты или не объявлены. Соответственно, присвоение эти переменных должно происходить в as_complete, т.е. когда ajaxsnippet загрузит данные и в странице появится slider_demo2.
Более того ваше первое условие
if ($('.slider_demo2').length > 0) {
Говорит о том что если такого объекта slider_demo2 не существует, то не выполнять этот код.
Надеюсь тут все ясно станет.
                    var slider_demo2 = $('.slider_demo2');
var slider_demo1 = $('.slider_demo1');
эти две строчки как бы принимают объекты, но т.к. у вас из-за ajaxsnippet нет объектов $('.slider_demo2'); и $('.slider_demo1'); их физечески не существует при загрузке страницы, то переменные пусты или не объявлены. Соответственно, присвоение эти переменных должно происходить в as_complete, т.е. когда ajaxsnippet загрузит данные и в странице появится slider_demo2.
Более того ваше первое условие
if ($('.slider_demo2').length > 0) {
Говорит о том что если такого объекта slider_demo2 не существует, то не выполнять этот код.
Надеюсь тут все ясно станет.
                Накидал на тестовом сайте
вызов сниппета:
Чанк, который отдает сниппет my_slider:
Код в футере:
Всё прекрасно отрабатывает на тестовом варианте. Значит, осталось разобраться, что именно нужно инициализировать на событие as_complete, как выше написал Константин.
                    вызов сниппета:
[[AjaxSnippet?
      &snippet=`my_slider`
      &as_mode=`onload`
]]Чанк, который отдает сниппет my_slider:
<div class="slider single-item">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
</div>Код в футере:
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<link rel="stylesheet" type="text/css" href="vendor/js/slick-theme.css"/>
<link rel="stylesheet" type="text/css" href="vendor/js/slick.css"/>
<script src="vendor/js/slick.js"></script>
<script>
    $(document).on('as_complete', document, function(e,d) {
    	$('.single-item').slick();
    });
</script>Всё прекрасно отрабатывает на тестовом варианте. Значит, осталось разобраться, что именно нужно инициализировать на событие as_complete, как выше написал Константин.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.