我正在尝试用流星创建游戏。由于许多人告诉我使用mongo db(因为它是vanilla,fast和reactive)我意识到,我需要“监听”mongo db update,以便能够响应已恢复的代码并进行更改到DOM。
我可以像这样使用Meteor Trackers:
var handle = Tracker.autorun(function () {
handleEvent(
collection.find({}, {sort: {$natural : 1}, limit: 1 }) // find last element in collection
);
});
答案 0 :(得分: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.
}
});
答案 1 :(得分:0)
cursor.observer()
似乎正是我想要的。
我的解决方案如下:
collection.find({}).observe({
addedAt: function (document, atIndex, before) {
handleEvent(
document
);
}
});
我意识到的唯一“问题”是,在测试时,似乎事件被解雇了两次。 (但是htat可能会进入另一个线程。不久之后)
(这是(我认为),因为延迟补偿,对象插入客户端数据库,然后服务器执行他的方法,然后将新集合发送到客户端,再次触发“添加”事件的位置。对吗?)
答案 2 :(得分:0)
我认为Tracker.autorun仅适用于客户端,因此您的代码可以在客户端上运行,但不能在服务器上运行。如果您想更新客户端集合,可以改为自动运行订阅。