Я создаю некоторые шаблоны с помощью Template.onCreated, а затем использую Tracker.autorun для создания некоторых подписок, а затем собираю данные с Сервера и сохраняю их на клиентском MiniMongo.
Затем я могуоставь указанный шаблон и в конце концов отправляйся обратно. Тем не менее, я замечаю, что по возвращении Blaze не фиксирует мои изменения. При маршрутизации назад кажется, что onRendered вызывается вместо onCreated. Это имеет смысл, однако, onRendered пока не совсем реагирует на все мои изменения данных. Я заметил это потому, что в minimongo нет данных для onRendered.
Однако я заметил, что он может получить объект путем обновления страницы (таким образом, вызывая onCreated и снова подписываясь и получая новый набор данных с сервера). Мой обходной путь - это повторно подписаться в onRendered, ноЯ чувствую, что не должен был этого делать, потому что я уже изначально подписался на OnCreated. Является ли это проблемой с Meteor, DDP работает медленно?
Допустим, у меня есть некоторая стандартная коллекция по умолчанию, которая называется Objects.
const Objects = new Mongo.Collection("Objects");
Так что в моем onCreated я подписываюсь на коллекцию следующим образом
Template.foo.onCreated(function () {
var self = this;
self.autorun(function () {
const objId= FlowRouter.getParam("id");
self.objectSubscription = Meteor.subscribe('obj', objId, {
onReady: function () {
},
onStop: function (error) {
if (error) {
alert('error')
}
}
});
Затем в onRendered я должен взломать его и излишне переподписать, потому что у меня нет objId, т.е. я не могу просто использовать Objects.find (),
Template.foo.onRendered(function () {
const objId= FlowRouter.getParam("id");
Meteor.subscribe('obj', objId, {
onReady: function () {
$('#obj').addClass('highlight');
},
onStop: function (error) {
if (error) {
alert('error');
}
}
});
//I feel like I should just be able to do
//const obj = Objects.findOne({_id:objId})
//$('#obj').addClass('highlight')
});
Любые идеи, почему я теряю данные в минимонго? И это плохая практика, чтобы «переподписаться»?