流星:发布动态请求的项目范围

Meteor: publish dynamically requested range of items

本文关键字:请求 项目 范围 动态 布动态 流星      更新时间:2023-09-26

我有超过5000+条记录的庞大收藏。我希望能够一次查看 10 条记录。如何以这种方式动态发布数据?

到目前为止,我已经尝试过:

我的server.js文件:

Meteor.methods({
    publishSongs : function (first, last) {
        Meteor.publish('adminSongs', function() {
            return Songs.find({}, {
                skip : first,
                limit : last,
                sort : {
                    date : -1
                }
            });
        });
    }
});

我的client.js文件:

Template.admin.events({
    'click #previous' : function() {
        updateSession(-10);
        publishSong();
    },
    'click #next' : function() {
        updateSession(10);
        publishSong();
    }
});
Template.admin.onCreated(function() {
    Session.setDefault('limit', {
        first : 0,
        last : 10
    });
    publishSong()
})
function publishSong() {
    Meteor.call(
        'publishSong',
        Session.get('limit').first,
        Session.get('limit').last
    );
}
function updateSession(value) {
    Session.set('limit', {
        first: Session.get('limit').first + value,
        last: Session.get('limit').last + value,
    });
}

服务器正在打印此错误消息:

Ignoring duplicate publish named 'adminSongs'

似乎我使用错误的出版物,可以使用一些指导。

看起来你从来没有更新过你的Session.get('limit')。 您需要更新,然后按下一个/上一个,否则您将始终获得相同的记录。 您还需要更改发布的方式:

Template.admin.events({
    'click #previous' : function() {
        updateSession(-10);
    },
    'click #next' : function() {
        updateSession(10);
    }
});
Template.admin.onCreated(function() {
    Session.setDefault('limit', {
        first : 0,
        last : 10
    });
    Template.instance().autorun( function() {
        Template.instance().subscribe('adminSongs', Session.get('limit').first, Session.get('limit').last);
    });
});
function updateSession(value) {
    Session.set('limit', {
        first: Session.get('limit').first + value,
        last: Session.get('limit').last + value,
    });
}

我假设根据您的代码,您已经定义了一个帮助程序来返回可用的歌曲。 上面的代码使你有一个订阅,并且该订阅将在会话变量更改时随时更新。

您的服务器代码也需要更新:

Meteor.publish('adminSongs', function(first, last) {
    return Songs.find({}, {
        skip : first,
        limit : last,
        sort : {
            date : -1
        }
    });
});

可以在 Meteor.Method 之外。