Похоже, что большая часть реактивности находится на стороне клиента.Как реагировать на сервер в Meteor?
У меня есть функция сервера, которую мне нужно запустить на основе количества элементов в коллекции. Эта функция создает схему для коллекции OrderSubmissions
на основе количества документов в Services
, который изменяется.
На клиенте это легко - я просто сделать
/lib/schemas
if(Meteor.isClient){
Tracker.autorun(function(){
Meteor.subscribe('services', function(){
// re-creates OrderSubmissions schema any time the Services subscription returns different data
});
});
};
я мог также соорудить что-то с Session
или ReactiveVar
. К сожалению, все эти методы доступны только клиенту. Мне нужно сделать:
/lib/schemas
if(Meteor.isServer){
// re-creates OrderSubmissions schema any time Services collection changes
};
Это единственный способ сделать это, чтобы использовать .observe
? Похоже, это дорогая вещь. Моя Services
коллекции будет меняться очень и очень редко (на самом деле, в этот момент все, что я хочу сделать, это создать OrderSubmissions
схемы в /lib/schemas
, когда мой /server/fixtures.js
по окончанию загрузки материала в Services
коллекции.)
К сожалению, для моего случая, Метеора грузы материал в /lib
перед тем /server
, так что моя схема в /lib
создается ошибочно:
/lib/schemas.js
OrderSubmissions
работает и схема, которая зависит отServices
заселяться, будет создаваться ошибочно и на сервере и на клиенте, потому что есть ничего в коллекцииServices
./server/fixtures.js
работает и заполняет коллекциюServices
.
Мне нужно # 2, чтобы произойти до # 1, но # 2 нужно оставить в код сервера. Я не хочу обертывать его в if(Meteor.isServer)
в /lib
, так как он не безопасен.
Вы можете поместить свой код из /lib/schemas.js в 'Meteor.startup (функция() {}); Я считаю, что отложит выполнение до тех пор, пока ваш файл fixtures.js не запустит и не заполнит коллекцию «Сервисы». –
Что касается реактивности сервера, я считаю, что .observe и .observeChanges являются единственными параметрами. –