2

SequelSphere を使用して Web アプリケーションのデータを保存し、変更トラッカーを使用して変更を追跡しています。初めて同期すると、トラッカーは変更された行を返します。2 回目に同期すると、トラッカーは変更された行の最初と 2 番目のセットの両方を返します。これが私がやっていることです:

// create my tracker
var tracker = db.changeTrackers.create("order_tracker", ["orders"]);

// insert first set of orders
for (var i = 0; i < firstOrders; ++i)
    db.insertRow("orders", firstOrders[i]);

// sync orders up
performSync(db.changeTrackers.get("order_tracker").getChangedRows());

// insert more orders (second set)
for (var i = 0; i < secondOrders; ++i)
    db.insertRow("orders", secondOrders[i]);

// sync second set of orders up
performSync(db.changeTrackers.get("order_tracker").getChangedRows());

最初の同期は正常に機能します。2 番目の同期では、最初のセットと 2 番目のセットからすべての注文が送信されます。2番目のセットを返すだけです。2番目のセットだけを返すにはどうすればよいですか?

4

1 に答える 1

1

DBChangeTracker の API については、こちらを参照してください: SequelSphere API

あなたの質問に答えるには、実際には2つの方法があります。

1) 「clearChanges()」メソッドを使用して、DBChangeTracker からすべての変更を削除します。同期の直後に「論理的に」実行できます。

// sync orders up
var tracker = db.changeTrackers.get("order_tracker");
performSync(tracker.getChangedRows());
tracker.clearChanges();

2) データ同期が非同期で発生する場合は、追跡を終了し、2 番目の変更トラッカーを使用して新しい変更を保持します。

// End first set of changes in tracker, start second
var trackerOne = db.changeTrackers.get("order_tracker");
trackerOne.endTracking();
var trackerTwo = db.changeTrackers.create("order_tracker_2", ["orders"]);
// sync orders up
performSync(tracker.getChangedRows());
// Get rid of first tracker
db.changeTrackers.drop("order_tracker");

これで十分かどうか教えてください!

于 2012-11-30T15:49:05.973 に答える