2013-04-26 26 views
1

我有以下客户端代码(具有两个集合AB):我怎样才能在同一事务中更新流星多个集合?

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 } }); 

上面的代码工作正常,即,服务器侧集合正确更新。问题发生在客户端,我有两个AB集合改变反应的模板上。

  1. 它立即重绘自己的基础上,延迟补偿机制,显示了两个集合
  2. 不久之后,它重绘自身正确的再次改变,但没有改变(:

    模板如下反应因为如果他们被拒绝)

  3. 它不会自动刷新了之后。但是,如果我打的刷新按钮,模板重绘一次,现在显示正确更新的集合(包括AB

在第二只刷新集合中的一个(父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

流星不支持事务处理(还)。认为这是在路线图上,虽然 – Swadq 2013-04-26 22:57:28

回答

0

,如果你做的这一切在一个命令可能更好地工作

B.update({name: 'parent of new element of A'}, { $set: { child: A.insert({name: 'new element of A') } }); 

你有,因为你的arent根据id

,你也可以尝试更新到把这个方法手动调用Deps.flush()的操作后,需要的是不应该的,但它的一些尝试

+0

都尝试内联和'Deps.flush()',但没有更好的结果。 – 2013-04-26 15:56:00

相关问题