2015-05-06 6 views
0

Я шаблон, как показано нижеметеорит полностью загружен обратный вызов

<template name="mainEvents"> 
    <section class="main-events-list events-list js-content-slider"> 
     {{#each events}} 
      <div class="events-list-item"> 
       <figcaption> 
        <dl class="clearfix"> 
         <dt> 
         <h3>{{name}}</h3></dt> 
        </dl> 
       </figcaption> 
       <figure class="ratioBox"> 
        <div class="js-backstretch content"><img src="{{image}}"/></div> 
       </figure> 
       <a href="" class="full-link"></a> 
      </div> 
     {{/each}} 
    </section> 
</template> 

простой помощник, как показано ниже

Template.mainEvents.helpers({ 
    "events": function() { 
     return Events.find({is_deleted:false}) 
    } 
}) 

и, наконец, простое железо-маршрут, как показано ниже:

Router.route('/slider', { 
    name: 'mainEn', 
    path: '/slider', 
    template: 'slider', 
    layoutTemplate: 'mainLayout', 
    yieldRegions: { 
     'indexHeader': {to: 'header'}, 
     'footer': {to: 'footer'} 
    }, 
    onBeforeAction: function() { 
     //TAPi18n.setLanguage('en'); // set to english 
     this.next(); 
    }, 
    action: function() { 
     // render all templates and regions for this route 
     this.render(); 
    } 
}); 

Template.mainEvents.rendered = function() { 
    $('.js-content-slider').slick({ 
     infinite: true, 
     slidesToShow: 1, 
     slidesToScroll: 1 
    }); 
} 

Как вы можете догадаться, я пытаюсь создать слайдер с данными, полученными из коллекции и пытающимися сделать это с помощью Slick упаковка.

Template.mainEvents.rendered Функция работает хорошо при роуминге между маршрутами. Предположим, что мой слайдер находится в/слайдер, и я загружаю приложение meteor, введя localhost: 3000, а затем нажмите кнопку/слайдер. все работает так, как должно.

Но когда вы пытаетесь загрузить страницу с помощью localhost: 3000/slider route. триггеры с включенной функцией до того, как содержимое будет полностью загружено, а slick терпит неудачу. Мне удается работать только с помощью функции setTimeout.

Как я могу получить весь контент в шаблоне, полностью загруженный и обработанный обратный вызов в метеоре?

Мне нужен $('.selector').load(function() {}) подобный функция.

или любой другой, способный решить эту проблему.

Заранее спасибо.

+0

где вы называете slick? Может быть, это поможет показать вашу функцию «rendered» –

+0

@ChristianFritz, отредактированную с помощью рендеринговой функции. – cankemik

ответ

0

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

Router.route('/slider', { 
    name: 'mainEn', 
    path: '/slider', 
    template: 'slider', 
    layoutTemplate: 'mainLayout', 
    yieldRegions: { 
     'indexHeader': {to: 'header'}, 
     'footer': {to: 'footer'} 
    }, 
    onBeforeAction: function() { 
     //TAPi18n.setLanguage('en'); // set to english 
     this.next(); 
    }, 
    action: function() { 
     // render all templates and regions for this route 
     this.render(); 
    }, 
    waitOn: function() { 
     return Meteor.subscribe('events'); 
    } 
}); 
+0

@ ChristionFritz извините. не работает. – cankemik

Смежные вопросы