Как связать серверные события на клиентских объектах и наоборот с метеором
Можно ли напрямую связать события на стороне сервера с объектами на стороне клиента в метеоре?
Я хотел бы обновить представление, например, когда запускается событие на стороне сервера. С другой стороны, я хотел бы запустить метод на стороне сервера, когда пользователь щелкает элемент просмотра.
Я мог бы использовать Meteor # методы для всех событий, но это кажется странным.
Или я могу указать обработчик событий, например, используя EventEmitter вне клиентской и серверной областей, чтобы он был доступен с обеих сторон и инициировал / связывал события для этого самого объекта?
Некоторые смущены тем, что я благодарен за подсказки в правильном направлении.
С уважением, Феликс
Обновить:
Использование методов Meteor # отлично работает, если пользовательские события должны быть сопоставлены с действиями на стороне сервера. Обратный путь до сих пор неясен. Асинхронные действия на стороне сервера могут сохранять свои результаты в коллекции, которая публикуется / подчиняется клиенту, что, в свою очередь, может обновлять некоторые представления из-за реактивного контекста. Но это странно, потому что сохранение такой информации происходит медленно, тратит впустую пространство и время. Какие-либо предложения?
2 ответа
Как насчет сохранения прогресса в сеансе? Вы могли бы сделать что-то вроде этого:
Template.progress.value = function() {
return Session.get('progress');
}
Затем, когда вы обновляете сеанс на сервере, клиентский шаблон автоматически получит эти изменения.
Из любопытства, как именно вы выполняете асинхронные действия на сервере? Я все еще пытаюсь понять это.
Я полагаю, что вы можете использовать Collection.observe на стороне сервера для "наблюдения" за событиями в Collection, когда клиенты вставляют, обновляют, удаляют и т. Д. Это может быть началом, если вы сосредоточены только на Collections. Я использовал его как своего рода цикл событий на стороне сервера, чтобы следить за изменениями в коллекции.
Когда пользователь нажимает на что-либо в представлении, попробуйте связать Событие шаблона с селектором View css и затем вызвать метод Meteor, который уведомит сервер о событии. Смотрите примеры связывания обработчика ключей и / или кнопок с Template.entry.event, который затем вызывает метод Meteor, уведомляющий сервер о том, что что-то произошло.