Невозможно вызвать View#subscribe из уничтоженного обратного вызова

Я получил ошибку и странное поведение внутри template.onDestoed;

У меня есть код для подписки на бесконечную прокрутку (он хранится в специальном шаблоне подписки). Он работает нормально, пока я не переключусь на другой маршрут и не создам новый экземпляр шаблона подписчика.

Код:

  Template.subscriber.onCreated(function() {
        var template = this;
        var skipCount = 0;
        template.autorun(function(c) {
            template.subscribe(template.data.name, skipCount, template.data.user);
            var block = true;
            $(window).scroll(function() {
                if (($(window).scrollTop() + $(window).height()) >= ($(document).height()) && block) {
                    block = false;
                    skipCount = skipCount + template.data.count;
                    console.log(template.data);
                    console.log("skip_count is "+skipCount);
                    template.subscribe(template.data.name, skipCount, template.data.user, {
                        onReady: function() {
                            block = true;
                        },
                        onStop: function() {
                            console.log('route switched, subscribtion stopped');
                        }
                    });
                }
            });
        })
    });

Когда я «прокручиваю вниз» на странице, подписчик работает нормально, когда я перехожу на другую страницу и «прокручиваю вниз», сначала я получаю данные из старого шаблона подписчика (который теоретически должен быть уничтожен) в первый раз. Во второй раз (снова прокрутите вниз) запуск нового экземпляра подписчика работает нормально.

КОНСОЛЬ ЭКРАНА PIRNT

Что я делаю неправильно?


person Тимофей Бутняков    schedule 18.08.2016    source источник


Ответы (1)


Ой! Мне помог хороший парень с метеорных форумов. На самом деле проблема в событии jquery.scroll. Он не очищается при уничтожении шаблона. (Это ошибка? Или это нормальное поведение?). Мне просто нужно было отвязать событие прокрутки в разделе onDestroyed.

person Тимофей Бутняков    schedule 22.08.2016