我有以下客户端代码(包含两个集合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中插入一个新元素时,我得到了上面描述的奇怪行为吗?
答案 0 :(得分:0)
如果你在一个命令中完成所有操作,它可能会更好用
B.update({name: 'parent of new element of A'}, { $set: { child: A.insert({name: 'new element of A') } });
你必须把它放在一个方法中,因为你没有根据id
进行更新你也可以尝试在操作之后手动调用Deps.flush()
,这不应该是需要的,但是要尝试一下