Bad*_*ads 13 javascript meteor
Tracker.autorun(function() {
DATA.find().observeChanges({
added: function(id, doc) {
console.log(doc);
}
});
});
Run Code Online (Sandbox Code Playgroud)
此代码正在服务器上调用.每次流星服务器启动时,该added函数都会触发数据库中的每个项目.有没有办法added只在添加新项目时触发回调?
Dav*_*don 21
addedobserveChanges首次运行时将为结果集中的每个文档调用.诀窍是在初始化期间忽略回调.我在回答这个问题时有一个扩展的例子,但这段代码对你有用:
(function() {
var initializing = true;
DATA.find().observeChanges({
added: function(id, doc) {
if (!initializing) {
console.log(doc);
}
}
});
initializing = false;
})();
Run Code Online (Sandbox Code Playgroud)
请注意,Tracker.autorun是仅限客户端的功能.在服务器上我认为它只执行一次.
小智 9
我很长时间都在挣扎.出于某种原因,David的回答对我不起作用 - 它是在初始化变量设置为false后触发的.
Avi的这种模式对我来说很成功:
var usersLoaded = false;
Meteor.subscribe("profiles", function () {
// at this point all new users sent down are legitimately new ones
usersLoaded = true;
});
Meteor.users.find().observe({
added: function(user) {
if (usersLoaded) {
console.log("New user created: ", user);
}
}
});
Run Code Online (Sandbox Code Playgroud)