Nano Hash - криптовалюты, майнинг, программирование

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

У меня есть проект, который включает в себя несколько подписок, которые распределяются между маршрутами.

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

Одна подписка на маршрут - никаких проблем:

    this.route('foos', {
        path: '/foos/;id',
        layoutTemplate: 'pagelayout',
        yieldTemplates: {
            'login_header': {to: 'header'},
            'foos': {to: 'main'},
            'footer': {to: 'footer'}
        },
        waitOn: function () {
            Session.set('fooLoading',true);
            return Meteor.subscribe("foos", this.params.id, Session.get("some-input"), {
                onReady: function() {
                    Session.set('fooLoading',false);
                },
                onError: function (error) {
                    Session.set('fooLoading',false);
                }
            });
        }
    });

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

Две подписки на маршрут - проблемы:

    this.route('foobar', {
        path: '/foobar/;id',
        layoutTemplate: 'pagelayout',
        yieldTemplates: {
            'login_header': {to: 'header'},
            'foobar': {to: 'main'},
            'footer': {to: 'footer'}
        },
        waitOn: function () {
            //Can put logic here to figure out which subscription will re-run, but gets hacky and is harder to maintain.
            Session.set('fooLoading',true);
            Session.set('barLoading',true);
            var fooHandle = Meteor.subscribe("foo", this.params.id, Session.get("some-input"), {
                onReady: function() {
                    Session.set('fooLoading',false);
                },
                onError: function (error) {
                    Session.set('fooLoading',false);
                }
            });
            var barHandle = Meteor.subscribe("bar", this.params.id, Session.get("some-other-input"), {
                onReady: function() {
                    Session.set('barLoading',false);
                },
                onError: function (error) {
                    Session.set('barLoading',false);
                }
            });
            return [fooHandle, barHandle];
        }
    });

Я писал логику, чтобы решить, будет ли повторяться каждая подписка, но это кажется хакерским и «не метеорным». Если бы в каждой подписке было что-то вроде onBeforeUpdate, это было бы здорово. Существует ли такая вещь или есть более элегантное решение?

16.11.2014

Ответы:


1

Вы должны использовать свойство this.ready(), посмотрите этот пример из документации Iron Router: https://github.com/EventedMind/iron-router/blob/devel/examples/waiton/waiton.js

16.11.2014
  • Спасибо за ответ Марио. Насколько я вижу, это по-прежнему позволяет мне только загружать маршрут или нет. Скорее, я хотел бы это для каждой отдельной подписки. то есть, если обновляется небольшая часть страницы, я не хочу, чтобы вся страница выглядела так, как будто она перезагружается, а только эта конкретная часть страницы. 16.11.2014
  • «this.ready()» для всех подписок. При подписке вы можете добавить обратный вызов, который будет обновлять сеанс/ваш собственный реактивный словарь, и таким образом вы можете создать собственный загрузчик для каждого раздела/подписки. Проверьте документацию по добавлению обратного вызова для подписки: docs.meteor.com/#/full/publish_connection< /а> 16.11.2014
  • Если взять пример из Evented Mind, как узнать, какая подписка начинается для загрузки. Легко узнать, какая из них завершила загрузку, но как узнать, что она начала загружаться? one = new Blaze.ReactiveVar(false); two = new Blaze.ReactiveVar(false); Router.route('/many', { waitOn: function () { // we'll be ready when both one and two are true. return [ function () { return one.get(); }, function () { return two.get(); } ]; }, action: function () { if (this.ready()) this.render('Page') else this.render('LoadingMany'); } }); 16.11.2014
  • Насколько я знаю, нет способа узнать процент статуса загрузки подписки. Я думаю, что вы всегда должны предполагать, что он начал загружаться, но еще не закончился. 16.11.2014
  • Мне не нужно знать процент. Мне просто нужно знать, не начался ли перерасчет одной из отдельных подписок... 17.11.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..