Как показать общее количество элементов и лимитный список элементов в одном шаблоне

У меня есть два раздела на моей странице.

Первый раздел имеет ограниченный список предметов. Второй раздел имеет общее количество элементов (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'})
})
Другие вопросы по тегам