Перезагрузить содержимое страницы, если переменная базы данных изменила Meteor - PullRequest
0 голосов
/ 21 января 2019

Я работаю над метеорологическим приложением.Я хочу перезагрузить содержимое клиента, когда переменная базы данных изменилась.Я использую Pub-Sub.Я хочу загрузить контент, если переменная состояния изменилась.

Meteor.publish('activities', function(loggedInUserToken) {
    var authObj = AuthenticationToken.findOne({ authToken: loggedInUserToken });
    if (authObj) {
        var userObj = Users.findOne({ _id: authObj.user_id });
        var activities = Activities.find({}, { sort: { createdAt: -1 } });
        return activities;
    }
    return this.ready();
});


Template.masterSku.onCreated(function() {
    var instance = this;
    instance.autorun(function() {
        var loggedInUserToken = "xxxxxxxxxxxxxxxx"
        statusSuscription = instance.subscribe("activities", loggedInUserToken);
        var activitiesObj = Activities.findOne({}, { sort: { createdAt: -1 } })
        if (activitiesObj && activitiesObj.status == "true") {
            console.log("Status Changed load Content accordingly")
        }
})

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вы можете использовать Tracker в функции onCreated ИЛИ вы можете попробовать заполнить данные через помощников.

import { Tracker } from 'meteor/tracker';

Tracker.autorun(() => {
 var loggedInUserToken = "xxxxxxxxxxxxxxxx"
        statusSuscription = instance.subscribe("activities", loggedInUserToken);
        var activitiesObj = Activities.findOne({}, { sort: { createdAt: -1 } })
        if (activitiesObj && activitiesObj.status == "true") {
            console.log("Status Changed load Content accordingly")
        }
});
0 голосов
/ 21 января 2019

autorun не будет пересчитываться до тех пор, пока не будут изменены реактивные данные И это изменение не будет запрошено в ходе вычислений.Хотя подписка является реактивным источником, вам также необходимо проверить ее готовность и, таким образом, вызвать новый цикл вычислений:

instance.autorun(function() {
    var loggedInUserToken = "xxxxxxxxxxxxxxxx"
    var statusSuscription = instance.subscribe("activities", loggedInUserToken);
    if (statusSuscription.ready()) { // causes a new compuation by the Tracker
      var activitiesObj = Activities.findOne({}, { sort: { createdAt: -1 } })
      if (activitiesObj && activitiesObj.status == "true") {
        console.log("Status Changed load Content accordingly")
        // here you can insert data into a ReactiveVar or ReactiveDict and use
        // result in a Template helper, which itself will cause your Template to re-render
      }
    }
}
...