【问题标题】:Re-subscribing in Meteor reloads all items在 Meteor 中重新订阅会重新加载所有项目
【发布时间】:2017-03-30 07:43:07
【问题描述】:

我有这个代码:

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 更改时,页面上的元素会重新加载。

看起来流星正在重新订阅(这是文档所期望的),但这是重新加载所有文档,它会删除消息,然后使用新的 limit 值重新加载。

我该如何预防呢?我想要一个无限滚动,但它现在的行为方式看起来是不可能的。

这是正在发生的事情的视频。 http://recordit.co/mlsGThOdHp

这是存储库: https://github.com/Sornii/sayito/tree/infinite-scroll

【问题讨论】:

  • MessagesFilter.common(...) 是做什么的?
  • 它只包装了一个自定义过滤器,它就像一个助手,我将编辑添加存储库。

标签: javascript meteor publish-subscribe infinite-scroll


【解决方案1】:

我变了

this.autorun(() => {
    this.subscribe('messages', {limit: this.state.get('limit')});
});

Tracker.autorun(() => {
    this.subscribe('messages', {limit: this.state.get('limit')});
});

现在它按我想要的方式工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多