Meteor:发布动态请求的项目范围
Meteor: publish dynamically requested range of items
我有 5000 多条记录,数量庞大 collection。我希望能够一次查看 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')。您需要更新然后按 next/previous 否则您将始终获得相同的记录。您还需要改变您发表文章的方式:
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,
});
}
根据您的代码,我假设您已经为 return 可用歌曲定义了一个助手。上面的代码使您拥有一个订阅,并且该订阅将在您的会话变量更改时随时更新。
您的服务器代码也需要更新:
Meteor.publish('adminSongs', function(first, last) {
return Songs.find({}, {
skip : first,
limit : last,
sort : {
date : -1
}
});
});
可以在Meteor.method之外。
我有 5000 多条记录,数量庞大 collection。我希望能够一次查看 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')。您需要更新然后按 next/previous 否则您将始终获得相同的记录。您还需要改变您发表文章的方式:
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,
});
}
根据您的代码,我假设您已经为 return 可用歌曲定义了一个助手。上面的代码使您拥有一个订阅,并且该订阅将在您的会话变量更改时随时更新。
您的服务器代码也需要更新:
Meteor.publish('adminSongs', function(first, last) {
return Songs.find({}, {
skip : first,
limit : last,
sort : {
date : -1
}
});
});
可以在Meteor.method之外。