我在此光标上使用observeChanges
,如下所示。游标包含一个名为“messages”的嵌套数组。
Connections.find({
status: 'connected'
}).observeChanges({
added: function (id) {
console.log(`Connected ${id}`);
},
changed: function (id, fields) {
// I expect fields to be the last array item pushed
console.log(fields['messages']);
}
});
然而,这会产生所有消息,而不是更改或添加的消息。你怎么能把最后的推?获取 last 一个将不会按预期工作,因为您可以一次推送多个。
答案 0 :(得分:1)
您必须在第一步中禁用observeChanges以仅捕获新内容:
var init = true;
Connections.find({
status: 'connected'
}).observeChanges({
added: function (id) {
if(init) return;
console.log(`Connected ${id}`);
},
changed: function (id, fields) {
if(init) return;
// I expect fields to be the last array item pushed
console.log(fields['messages']);
}
});
init = false;
这是meteorpad版本:
http://meteorpad.com/pad/2NcJwxHYQNTqktMa5/Copy%20of%20Leaderboard
答案 1 :(得分:0)
我找到了一种方法,它只是不使用observeChanges
,而是使用observe
。
Connections.find({
status: 'connected'
}).observe({
changed: function (newDoc, oldDoc) {
let newMessages = _.clone(newDoc.messages);
let old = _.clone(oldDoc.messages);
while (JSON.stringify(old) !== JSON.stringify(newMessages.slice(0, old.length))) {
old.shift();
}
let last = newMessages.slice(old.length);
}
});