Моя таблица мерцает, потому что моя подписка снова подстраивается в автозапуск. Когда подписка вызывается снова в автозапуске, мои данные исчезают, и у меня есть пустая таблица, пока программа Data.find() снова не запустится. Как я могу сохранить данные, пока новые данные не будут готовы?Meteor сохраняет старые подписанные данные до тех пор, пока не будет готова новая подписанная дата.
Template.table.onCreated(function() {
this.autorun(() => {
if (Session.get('selectedItem') && selectedSubItem.get()) {
this.subscribe('dataOverview', Session.get('selectedItem'), selectedSubItem.get()._id);
}
});
Template.table.helpers({
collection() {
return Data.find({"item._id": Session.get('selectedItem')._id, "subItem._id": selectedSubItem.get()._id});
},
Я также пробовал по-другому, чтобы узнать, действительно ли это проблема с данными подписки с кодом ниже. После автозапуска таблица остается пустой, прежде чем поиск будет выполняться во второй раз.
Template.table.onCreated(function() {
this.autorun(() => {
if (Session.get('selectedItem') && selectedSubItem.get()) {
this.subscribe('dataOverview', Session.get('selectedItem'), selectedSubItem.get()._id,() => {
let cursor = Prjs.find({"app._id": Session.get('selectedApp')._id,"release._id": selectedRel.get()._id});
this.tableData.set(cursor);
});
}
});
Template.table.helpers({
collection() {
return Template.instance().tableData.get();
},
});
Сервер явно ждет, пока все данные не передаются вниз (новая подписки готова) для новой подписки перед удалением данных от старой подписки. Идея здесь заключается в том, чтобы избежать мерцания - вы можете, при желании, продолжать показывать старые данные подписки до тех пор, пока не будут готовы к новым данным, а затем мгновенно перейдут на новый набор данных подписки .
Это означает, что при изменении подписки будет быть периодом, когда вы перерегистрированы, и есть больше данных на клиента, чем вы строго просили. Это одна очень важная причина, почему вы всегда должны получать те же данные, что у вас есть , на которые подписан (не «перехватывать»).
Я хочу «продолжать показывать данные старой подписки до тех пор, пока новые данные не будут готовы, а затем мгновенно перейдут на полный набор данных новой подписки», но как это сделать?
Вы пытались использовать [meteorhacks: subs-manager] (https://atmospherejs.com/meteorhacks/subs-manager)? – JeremyK
Затем создайте пару реактивных переменных, которые будут содержать новые значения, когда подписка будет готова и старые до тех пор. Ваша проблема заключается в том, что вы полагаетесь на одну и ту же реактивную переменную для подписки и сбора данных. – MasterAM
@MasterAM это хорошая идея, но она не работает. см. править выше – Simon