Javascript Meteor从服务器响应订阅更改

Javascript Meteor从服务器响应订阅更改,javascript,meteor,Javascript,Meteor,我似乎无法使用以下代码从服务器端获取被动收集更改: Template.name.onRendered(function() { this.autorun(function(){ Meteor.subscribe("items", Session.get("start"), Session.get("end"), function () { //update UI }); }); }); 当Session.

我似乎无法使用以下代码从服务器端获取被动收集更改:

Template.name.onRendered(function() {
    this.autorun(function(){
            Meteor.subscribe("items", Session.get("start"), Session.get("end"), function () {
             //update UI
            });
    });
});
Session.get(“start”)
更改时,它将从服务器正确订阅范围内的所有项目,但如果我从mongo shell中删除了一个项目,则不会调用订阅回调,即客户端不会触发重新订阅,我需要使这两个条件正常工作

  • 当Session.get(“开始”)、Session.get(“结束”)发生更改时,则 从服务器(我使用subscribe)和更新UI获取范围内的数据
  • 当查询结果项.find(开始、结束)更改(服务器端更改为集合)时,还将更新UI
  • 我几乎可以通过使用另一个自动运行程序来跟踪项目来实现这些功能。find()查询


    但似乎在每个订阅完成后,查询自动运行也会运行,这是不必要的,它实际上应该只从服务器拾取更改,我应该如何将服务器端范围内的任何更改反映到客户端?

    只有当您的反应变量(开始和结束)更改时,订阅才会再次运行。为了获取UI更新,您正在过度处理订阅回调(这不是正确的使用模式)。您的解决方案可能看起来更像。@davidwell仅在订阅完成后才提供UI所需的数据。我很想知道为什么这不是正确的模式,谢谢!但“更新UI”到底是什么?为什么你要主动地更新它,而不是让它自己被动地更新?您可能在这里采取了错误的方法。@CaptSaltyJack它正在更新fullcalendar事件源,它是一个js库,我只能通过调用它的API来刷新它。您是否考虑过使用Tracker.Dependency使日历调用成为反应性的?
        Template.name.onRendered(function() {
            // when user changed the date range, get the new data
            this.autorun(function(){
                    Meteor.subscribe("items", Session.get("start"), Session.get("end"), function () {
                     //update UI
                    });
            });
            // get all the changes from server and update UI
            this.autorun(function(){
                   Items.find(start, end);
                   //update UI   
            });
        });