代码之家  ›  专栏  ›  技术社区  ›  Vishnu Chauhan

如果数据库变量已更改Meteor,则重新加载页面内容

  •  0
  • Vishnu Chauhan  · 技术社区  · 6 年前

    我正在开发流星应用程序。我想在数据库变量发生更改时重新加载客户端的内容。我正在使用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 回复  |  直到 6 年前
        1
  •  0
  •   Jankapunkt    6 年前

    这个 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
          }
        }
    }
    
        2
  •  0
  •   Vishal    6 年前

    您可以在oncreated函数中使用tracker,也可以尝试通过助手填充数据。

    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")
            }
    });
    
    推荐文章