【问题标题】:Meteor - Subscription Does not Update Collection Display Until Refresh (Cache in Template?)Meteor - 订阅在刷新之前不会更新集合显示(在模板中缓存?)
【发布时间】:2016-04-07 01:01:20
【问题描述】:

我有一个显示集合数据的模板(“ImageView”),我在两条不同的路线上使用它来显示不同的内容:一条路线用于显示所有数据,另一条路线用于显示属于特定的数据用户。

因为我的布局包含各种组件,所以我将 ImageView 模板嵌入到每条路线的主模板(“相册”和“个人资料”)中。

我在两个主要模板上设置了模板级别订阅,如下所示:

 Template.profile.onCreated ( function() {
     Tracker.autorun(function() {
         Meteor.subscribe('images', Meteor.userId());
     });
 });

 Template.Album.onCreated (function() {
     Tracker.autorun(function() {
         Meteor.subscribe('images');
     });  })

我在服务器上有这样的发布功能:

 Meteor.publish('images', function ( user_id) {
     findQuery={}
     if (user_id) {
       findQuery = {userId: user_id};
     } 
     return Images.find(findQuery);

 });

问题是,当我在两个页面之间的路径之间导航时,模板“ImageView”不会反应性地更新其内容,直到我按下刷新。 (如果我手动输入网址并按回车,它也可以正常工作)。模板中是否有缓存?但它们似乎在路由更改时按预期创建和销毁(签入 onCreated 和 onDestroyed 回调)。

我在发布功能中记录了控制台,并确保在两条路线之间导航时更改了发布,但客户端没有相应更新。我也尝试过响应式发布包 Template.subscriptionReady,FlowRouter.reload() ,但它们并没有解决问题。

谁能告诉我这个问题可能是什么?顺便说一句,我正在使用 FlowRouter。

感谢任何输入。非常感谢。

【问题讨论】:

  • 我不确定这是否是问题的原因,但您不应该在onCreated 中使用Tracker.autorun,因为当模板被销毁时您必须手动停止计算。请改用Template.autorun
  • 非常感谢!很好地解决了这个问题。
  • 我将评论添加为答案,因此您可以接受。 :)

标签: templates meteor meteor-blaze


【解决方案1】:

您不应该在onCreated 中使用Tracker.autorun,因为当模板被销毁时您必须手动停止计算。请改用this.autorun。它使用Template autorun

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多