Javascript 在Meteor中,observeChanges中的this.added和this.change未按预期运行
我很抱歉标题含糊不清,帖子很长,但我很难描述我的行为。我试着用任何一种方式来解释 我有一个新闻提要页面,在那里我可以显示帖子。我只想显示比用户打开页面时旧的帖子,这样列表就保持被动,而不会在顶部添加新帖子。因此,我决定在发布函数中使用observeChanges,如下所示:Javascript 在Meteor中,observeChanges中的this.added和this.change未按预期运行,javascript,meteor,Javascript,Meteor,我很抱歉标题含糊不清,帖子很长,但我很难描述我的行为。我试着用任何一种方式来解释 我有一个新闻提要页面,在那里我可以显示帖子。我只想显示比用户打开页面时旧的帖子,这样列表就保持被动,而不会在顶部添加新帖子。因此,我决定在发布函数中使用observeChanges,如下所示: Newsfeed = new Mongo.Collection('newsfeed'); if (Meteor.isServer) { Meteor.publish("newsfeed", function (in
Newsfeed = new Mongo.Collection('newsfeed');
if (Meteor.isServer) {
Meteor.publish("newsfeed", function (init_last_activity, limit) {
var self = this;
check(limit, Number);
check(init_last_activity, Date);
var init = true,
count = 0;
var handle = Newsfeed.find({},{
'limit': limit,
'sort': {'updated_time': -1}
}).observeChanges({
// when a post is added, we check if it's got an older
// updated_time than the initial updated time field
// generated on init and only if so, we display
// the post to the client
added: function(id, doc) {
count++;
console.log('++++ POST NR. ' + count + ' ++++ ('+id+')');
console.log('Updated time: ', doc.updated_time);
console.log('Last activity: ', init_last_activity);
if (doc.updated_time < init_last_activity) {
console.log('- - - - -');
console.log('ADDED!');
self.added('newsfeed', id, doc);
console.log('ID: ' + id);
console.log(' ');
}
},
changed: function(id, fields) {
console.log('Trigger changed for id:', id);
self.changed('newsfeed', id, fields);
}
});
init = false;
this.ready();
this.onStop(function() {
handle.stop();
});
});
}
如您所见,有两篇文章被发送到客户端。现在,当同一个用户在几秒钟后试图“喜欢”第二个post ID:7pt3nbkkqgckj4g5fc时,会触发上述代码中的self.change,这种情况会发生:
I20141024-20:21:13.997(-7)? Trigger changed for id: 7pt3nBKqgCKJ4G5fc
I20141024-20:21:13.997(-7)? Exception in queued task: Error: Could not find element with id 7pt3nBKqgCKJ4G5fc to change
I20141024-20:21:13.997(-7)? at _.extend.changed (packages/ddp/livedata_server.js:185)
I20141024-20:21:13.997(-7)? at _.extend.changed (packages/ddp/livedata_server.js:397)
I20141024-20:21:13.997(-7)? at _.extend.changed (packages/ddp/livedata_server.js:1154)
I20141024-20:21:13.997(-7)? at Newsfeed.find.observeChanges.changed (app/collections/newsfeed.js:125:22)
I20141024-20:21:13.998(-7)? at packages/mongo/observe_multiplex.js:163
I20141024-20:21:13.998(-7)? at Array.forEach (native)
I20141024-20:21:13.998(-7)? at Function._.each._.forEach (packages/underscore/underscore.js:105)
I20141024-20:21:13.998(-7)? at Object.task (packages/mongo/observe_multiplex.js:157)
I20141024-20:21:13.998(-7)? at _.extend._run (packages/meteor/fiber_helpers.js:145)
I20141024-20:21:13.998(-7)? at packages/meteor/fiber_helpers.js:123
与几秒钟前附加到self.added函数的id完全相同。奇怪的是,如果我跳过if语句,不管发生什么都允许self.added运行,那么一切都会正常工作:
added: function(id, doc) {
self.added('newsfeed', id, doc);
}
因此,尽管在前面的示例中调用了self.added,但似乎仅仅因为在if语句中调用self.added就破坏了代码
有人知道为什么会这样吗?我是否误解了添加和更改的功能?我很困惑:这是一篇老文章,但我想我在这个链接上找到了一个错误的线索:所以对于将来遇到这个问题的人,请查看GitHub上的链接。
added: function(id, doc) {
self.added('newsfeed', id, doc);
}