2015-12-03 3 views
3

Я пытаюсь создать приложение Meteor, которое хранит контент в коллекции Meteor, который будет передаваться между сервером и клиентом, чтобы отобразить сообщение об успешном завершении после асинхронного вызова api через twit пакет.Сбор метеоров обновлен на сервере, не отражается на клиенте

Однако я столкнулся с проблемой, когда обновляю коллекцию на сервере, и обновления не отражаются на клиенте. Мой код выглядит следующим образом:

/Библиотека

Alerts = new Meteor.Collection("alerts"); 

/клиент

Template.suggestionForm.events({ 
    "submit form": function (e) { 
     return Meteor.call('submitMessage', message); 
    } 
}); 
Meteor.subscribe('alerts'); 
Meteor.startup(function() { 
    Tracker.autorun(function() { 
     console.log(Alerts.find()); 
    }) 
}); 

/сервер

Fiber = Npm.require('fibers') 
Twit = new TwitMaker({ 
    consumer_key: '...', 
    consumer_secret: '...', 
    access_token: '...', 
    access_token_secret: '...' 
}); 
Meteor.publish("alerts", function(){ 
    Alerts.find(); 
}); 
Meteor.methods({ 
    submitMessage: function(message) { 
     this.unblock(); 
     Twit.post('statuses/update', { 'status': message }, function(err, data, response) { 
      Fiber(
       Alerts.remove({}); 
       Alerts.insert({response: err}); 
      ).run(); 
     })); 
    } 
}); 

Когда я суб с формой, вызываемой функцией, просто отлично и обновляет коллекцию, однако Tracker.autorun() не запускается. Любые идеи, почему это происходит, или то, как я могу заставить клиента слушать изменения в коллекциях, было бы очень полезно. Спасибо!

ответ

1

Не забудьте вернуть полученный курсор в публикации():

Meteor.publish("alerts", function(){ 
    return Alerts.find(); 
}); 

Ссылка: http://docs.meteor.com/#/full/meteor_publish

функция Опубликовать может возвращать Collection.Cursor, в этом случае Метеор будет публиковать документы, которые курсора каждому подписанному клиенту. Вы также можете вернуть массив Collection.Cursors, и в этом случае Meteor опубликует все курсоры.

и

В качестве альтернативы, публиковать функция может непосредственно контролировать его опубликовали запись установлена ​​путем вызова функции добавлена ​​(добавить новый документ к опубликованному набора записей), изменено (изменить или удалить некоторые поля в документе уже в опубликованном наборе записей) и удалены (чтобы удалить документы из опубликованного набора записей). Эти методы предоставляются в вашей функции публикации.

Если функция публикации не возвращает курсор или массив курсоров, предполагается, что используется интерфейс с добавленным/измененным/удаленным уровнем низкого уровня, и он также должен быть готов к вызову после завершения набора исходных записей.

+0

Я никогда не чувствовал себя таким глупым. Спасибо! – Josh

Смежные вопросы