Meteor - 订阅在刷新之前不会更新集合显示(在模板中缓存?)
Meteor - Subscription Does not Update Collection Display Until Refresh (Cache in Template?)
我有一个展示采集数据的模板("ImageView"),我用它在两个不同的路由显示不同的内容:一个路由用于显示所有数据,另一个用于显示数据属于特定用户。
因为我的布局包含各种组件,所以我将 ImageView 模板嵌入到每个路由的主模板中("Album" 和 "Profile")。
我在两个主要模板中设置了模板级订阅,如下所示:
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" 不会反应性地更新其内容,直到我按下刷新。 (如果我手动输入 url 并按回车键,它也可以正常工作)。模板中是否有缓存?但它们似乎在路由更改时按预期创建和销毁(在 onCreated 和 onDestroyed 回调中检查)。
我在发布功能中登录了控制台,并确保在两条路线之间导航时发布已更改,但客户端未相应更新。我也试过 reactive-publish 包 Template.subscriptionReady,FlowRouter.reload() 但他们没有解决问题。
任何人都可以告诉我可能是什么问题吗?顺便说一句,我正在使用 FlowRouter。
欢迎任何意见。非常感谢。
您不应在 onCreated
中使用 Tracker.autorun
,因为当模板被销毁时,您必须手动停止计算。请改用 this.autorun
。它使用 Template autorun.
我有一个展示采集数据的模板("ImageView"),我用它在两个不同的路由显示不同的内容:一个路由用于显示所有数据,另一个用于显示数据属于特定用户。
因为我的布局包含各种组件,所以我将 ImageView 模板嵌入到每个路由的主模板中("Album" 和 "Profile")。
我在两个主要模板中设置了模板级订阅,如下所示:
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" 不会反应性地更新其内容,直到我按下刷新。 (如果我手动输入 url 并按回车键,它也可以正常工作)。模板中是否有缓存?但它们似乎在路由更改时按预期创建和销毁(在 onCreated 和 onDestroyed 回调中检查)。
我在发布功能中登录了控制台,并确保在两条路线之间导航时发布已更改,但客户端未相应更新。我也试过 reactive-publish 包 Template.subscriptionReady,FlowRouter.reload() 但他们没有解决问题。
任何人都可以告诉我可能是什么问题吗?顺便说一句,我正在使用 FlowRouter。
欢迎任何意见。非常感谢。
您不应在 onCreated
中使用 Tracker.autorun
,因为当模板被销毁时,您必须手动停止计算。请改用 this.autorun
。它使用 Template autorun.