流星无限滚动:阻止订阅重新渲染元素

时间:2016-08-27 16:34:19

标签: meteor publish-subscribe infinite-scroll

我在Meteor上实现无限滚动,以显示链接到大集合的图片网格。

当用户位于页面的末尾时,我订阅了更多元素,并增加了显示的图片数量(通过我的template.helper)。

//SERVER
Meteor.publish('generalMusics', function(limit){
   return Musics.find({}, {limit: limit});
});

//CLIENT: when the template is created and when the limit of data increases 
//it subscribes again
Template.t_elementSubHeader.onCreated( function() {
    Session.set('reqLimit',50);
    var self = this;
    //Everytime reqLimit changes I redo the subscribe
    this.autorun(function(){
        self.subscribe('generalMusics', Session.get('reqLimit'));
});

//CLIENT: more elements are sent to the template when reqLimit increases
Template.t_elementSubHeader.helpers({
    data: function() {
        return Musics.find({}, {limit : Session.get('reqLimit')});
    }
});

//Also on client, when the user reach the bottom of the page
Session.set('reqLimit',Session.get('reqLimit')+50);

它运行良好但所有模板元素都重新渲染,这也需要一些时间。这对用户来说非常不方便,我认为这需要时间,因为我显示的是图片而不是文字(我们已经将图片压缩到最小尺寸)。

问题是由于订阅会重新呈现所有模板元素。

如何在订阅时添加新元素并阻止重新呈现已显示的元素?

我的应用程序将在移动设备上,因此我无法订阅许多元素,然后只是增加模板助手的限制。

1 个答案:

答案 0 :(得分:0)

最后我明白了,我在html中添加了一些代码,等待订阅准备就绪,我忘记了。

我删除了:

{{#if Template.subscriptionsReady}}
        {{> Template.dynamic template="t_elementList" data=tabData}}
{{/if}}

无限卷轴就像魅力一样。