我有以下客户端代码(有两个集合A
和B
):
var id = A.insert({name: 'new element of A');
var b = B.findOne({name: 'parent of new element of A'});
B.update(b._id, { $set: { child: id } });
上面的代码工作正常,即服务器端集合已正确更新。问题发生在客户端上,我有一个模板可以同时对A
集合B
更改做出反应。
模板的反应如下:
- 它基于延迟补偿机制立即重绘自身,显示两个集合的正确更改
- 不久之后,它再次重绘自己,但没有更改(好像它们已被拒绝)
- 之后它不再自动刷新。但是,如果我点击刷新按钮,模板会再次重绘,现在显示正确更新的集合(
A
和B
)
在第二次刷新时,只有一个集合(父级B
)已更新,并且模板显示不连贯的数据(好像没有发生更新一样)。
我认为这是因为我在这里处理的不是一个同时更新两个集合的事务,从而混淆了客户端模板。
我该如何解决这个问题?
编辑:
我必须补充一点,在我的情况下,我对子数据库有两个补充订阅:
var A = new Meteor.Collection('children');
handle1 = Meteor.subscribe('children1');
handle2 = Meteor.subscribe('children2');
并在服务器上
Meteor.publish('children1', function () {
return A.find({ sex: male });
}
Meteor.publish('children2', function () {
return A.find({ sex: female });
}
这可能是当我在 A 中插入一个新元素时,我得到上述奇怪行为的原因吗?