2013-04-26 27 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

相關問題