Как показать общее количество элементов и лимитный список элементов в одном шаблоне
У меня есть два раздела на моей странице.
Первый раздел имеет ограниченный список предметов. Второй раздел имеет общее количество элементов (recordsCount).
Когда сервер добавляет новый элемент, я вижу, что список элементов обновляется, но общее количество имеет старое значение.
Tracks = new Mongo.Collection('tracks')
Клиент:
Meteor.subscribe('tracks')
Meteor.call('records', function(err, data) {
Session.set('_records', data)
})
Template.tracks.helpers({
tracks: function() {
return Tracks.find()
},
recordsCount: function() {
return Session.get('_records')
}
})
Сервер:
Meteor.publish('tracks', function() {
return Tracks.find({}, {limit: 100})
})
Meteor.methods({
records: function() {
return Tracks.find({}).count()
}
})
var CronManager = new Cron(10000)
CronManager.addJob(1, function() {
Tracks.insert({filed1: 'test'})
})
2 ответа
Если вы просто хотите эффективно использовать счетчики в своем приложении, ознакомьтесь с пакетом публикаций.
Meteor.publish('posts', function(author) {
var cursor = Tracks.find(...);
Counts.publish(this, 'tracks-count', cursor, {nonReactive: true});
});
nonReactive
Варианты отправляет счет только по требованию. Это может быть полезно, если вам не нужны счета в реальном времени, так как большинство приложений могут обновляться каждые несколько секунд. Это сэкономит много ресурсов процессора.
Template.tracks.helpers({
tracks: function() {
return Counts.get('posts-count')
}
});
Подсказка к превосходной главе Аруноды по этому вопросу из Пуленепробиваемого Метеора "Подсчет документов".
Я исследовал решение с помощью пакета publish-countts. В моем случае это очень тяжелый пакет. Он загружал процессор все время. Я заменил свой код на стороне сервера, чтобы использовать коллекцию с полем подсчета.
Общие:
Counter = new Mongo.Collection('count')
Сервер: Meteor.Publish('count', function() { return Counter.find() })
if(Counter.find().count() === 0) Counter.insert({count: Tracks.find().count()})
var CronManager = new Cron(10000)
CronManager.addJob(1, function() {
Counter.update({}, {$inc: {count: 1}})
Tracks.insert({filed1: 'test'})
})