在 Meteor 中重新订阅会重新加载所有项目
Re-subscribing in Meteor reloads all items
我有这个代码:
Template.messageList.onCreated(function onCreated() {
this.state = new ReactiveDict();
this.state.setDefault({
limit: 5
});
this.autorun(() => {
this.subscribe('messages', {limit: this.state.get('limit')});
});
});
Template.messageList.helpers({
messages () {
const instance = Template.instance();
return Messages.find({}, MessagesFilter.common({limit: instance.state.get('limit')}));
}
});
Template.messageList.events({
'click .ui.button.more' (event, instance) {
const limit = instance.state.get('limit');
instance.state.set('limit', limit + 5);
}
});
它本来是一个无限卷轴,但它呈现了奇怪的事件。现在,页面上的元素会在 limit
更改时重新加载。
看起来 meteor 正在重新订阅(这是文档所期望的),但这正在重新加载所有文档,它会删除消息,然后使用新的 limit
值重新加载。
我该如何预防?我想要一个无限滚动,但它现在的行为方式看起来不可能。
这是一个视频,展示了正在发生的事情。
http://recordit.co/mlsGThOdHp
这是存储库:
https://github.com/Sornii/sayito/tree/infinite-scroll
我变了
this.autorun(() => {
this.subscribe('messages', {limit: this.state.get('limit')});
});
至
Tracker.autorun(() => {
this.subscribe('messages', {limit: this.state.get('limit')});
});
现在它按照我想要的方式工作。
我有这个代码:
Template.messageList.onCreated(function onCreated() {
this.state = new ReactiveDict();
this.state.setDefault({
limit: 5
});
this.autorun(() => {
this.subscribe('messages', {limit: this.state.get('limit')});
});
});
Template.messageList.helpers({
messages () {
const instance = Template.instance();
return Messages.find({}, MessagesFilter.common({limit: instance.state.get('limit')}));
}
});
Template.messageList.events({
'click .ui.button.more' (event, instance) {
const limit = instance.state.get('limit');
instance.state.set('limit', limit + 5);
}
});
它本来是一个无限卷轴,但它呈现了奇怪的事件。现在,页面上的元素会在 limit
更改时重新加载。
看起来 meteor 正在重新订阅(这是文档所期望的),但这正在重新加载所有文档,它会删除消息,然后使用新的 limit
值重新加载。
我该如何预防?我想要一个无限滚动,但它现在的行为方式看起来不可能。
这是一个视频,展示了正在发生的事情。 http://recordit.co/mlsGThOdHp
这是存储库: https://github.com/Sornii/sayito/tree/infinite-scroll
我变了
this.autorun(() => {
this.subscribe('messages', {limit: this.state.get('limit')});
});
至
Tracker.autorun(() => {
this.subscribe('messages', {limit: this.state.get('limit')});
});
现在它按照我想要的方式工作。