2015-08-12 3 views
2

Я пытаюсь создать игру с метеор. Поскольку многие люди говорили мне использовать mongo db (потому что это ваниль, быстрый и реактивный), я понял, что мне нужно будет «слушать» обновление mongo db, чтобы иметь возможность реагировать на полученный код и вносить изменения к DOM.Meteor послушать обновления mongo db

Могу ли я использовать Meteor Trackers так:

var handle = Tracker.autorun(function() { 
    handleEvent(
    collection.find({}, {sort: {$natural : 1}, limit: 1 }) // find last element in collection 
); 
}); 
+0

Функции, которые вы ищете, - это функции 'наблюдайте' и' observerChanges' курсоров. См. Здесь: http://docs.meteor.com/#/full/observe. Вы можете использовать трекер, но я думаю, что наблюдение за курсором более масштабируемо. –

ответ

1

Что вы ищете является observe и observerChanges функции курсоров. См. Здесь: http://docs.meteor.com/#/full/observe

Вы можете использовать трекер, но я думаю, что наблюдение за курсором более масштабируемо.

Так как в вашем примере вы, кажется, заинтересованы только в ответ на последний добавленный объект, вот скелет, как вы могли бы сделать это с observeChanges:

var cursor = Collection.find(); 
cursor.observeChanges({ 
    added: function(id, object) { 
     // This code runs when a new object "object" was added to collection. 
    } 
}); 
+0

Похоже, я немного опоздал с моим ответом. Но все равно спасибо! –

0

cursor.observer(), кажется, именно то, что я был находясь в поиске.

Мое решение выглядит следующим образом:

collection.find({}).observe({ 
    addedAt: function (document, atIndex, before) { 
    handleEvent(
     document 
    ); 
    } 
}); 

Единственная «проблема» я понял, в том, что во время тестирования, казалось, как событие был уволен в два раза. (Но Хтат будет, вероятно, пойти в другой поток. В ближайшее время)

(Это (я думаю) из латентной компенсации, когда объект получает вставленную в клиентской БД, то сервер выполняет его метод, а затем отправляет новую коллекцию клиенту, где «добавленное» событие запускается снова. right?)

0

Я думаю, что Tracker.autorun работает только для клиента, поэтому ваш код может работать на клиенте, но не на сервере. Может быть, если вы хотите обновить коллекцию на стороне клиента, вы можете авторизовать подписку.

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