0

У меня есть длинный помощник шаблона. Он опирается на три отдельные коллекции и выполняет много циклов, чтобы сводить некоторые данные для ежедневных отчетов. Пользователям все в порядке, поскольку они работают долго, но мне нужно дать им отзывы о том, что клиент занят вычислением того, что будет отображаться в пользовательском интерфейсе. Проблема для меня заключается в том, что использование hookOutOff только позволяет мне частично работать, и обработанный обратный вызов не работает, если я не добавляю новую строку в шаблон (что почти никогда). На самом деле, интересно, понимает ли команда Метеор это. Это похоже на функцию, которая была бы неплохо иметь. У меня есть таблица с таким же количеством строк и столбцов, но значения в ячейках меняются. Как я могу показать пользователям некоторую обратную связь, в то время как JS для расчета этих ячеек работает?Meteor 0.8.0+, как обеспечить «занятый счетчик» для долгого кода?

ответ

3

Метеор способом было бы использовать реактивную переменную:

HTML

<template name="busy"> 
    {{#if processing}} 
    spinner 
    {{else}} 
    Done, showing results: ... 
    {{/if}} 
</template> 

JS

var data = new ReactiveDict(); 

Template.busy.rendered = function() { 
    data.set('processing', true); 
}; 

Template.busy.processing = function() { 
    return data.get('processing'); 
}; 

var processing = function() { 
    ... 
    // Looooong calculations 
    ... 
    // Or even async 
    ... 
    data.set('processing', false); 
}; 
+0

Я очень хочу попробовать это (после того, как я вернусь из своего похода). Но я просто заметил, что для того, чтобы использовать ваше решение, вам нужно это: https://github.com/meteor/meteor/issues/1771 – jasongonzales

+0

Я думаю, что теперь это включено по умолчанию, но я не уверен. Вечером это проверит. –

1

У меня была аналогичная проблема. Мне нужно было показать, когда таблица обновляется. Я наблюдал запрос (check Collection.observeChanges) и запускал в строке флэш-версию с поддержкой jQuery.

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

+0

Да, спасибо! Я только сейчас разрабатываю решение, как вы его описываете. – jasongonzales

+0

Проблема, с которой я столкнулся, заключается в том, что я не могу полагаться на блокирующий элемент, присутствующий после выполнения моей вспомогательной функции ... Любые подсказки? – jasongonzales

+1

совет: Не используйте jQuery для вещей, которые можно легко сделать с помощью помощников и реактивных переменных. –

0

ОК, поэтому ключ был двояким. Мне нужно было специально отложить обратную связь «Загрузка», которую я предоставлял. Я предполагаю, что это так, что он был вызван после того, как элементы обновления были фактически завершены рендерингом. Я использовал функцию задержки подчеркивания так:

_.delay removeUpdating, 500 

removeUpdating просто удаляет класс по каждой ячейке таблицы «Обновление».

И затем в начале этого же вспомогательного метода я добавляю эти классы ко всем ячейкам.

Задержка в сочетании с приятной анимацией фона CSS3 дает пользователю приятный сигнал, который поля обновляются при навигации!

Я бы предпочел не добавлять задержку вручную и не использовать jQuery для добавления и удаления классов, поэтому любые лучшие предложения оцениваются!