3

HTML5 クライアント データベースとして SequelSphere を使用しています。また、「変更トラッカー」を使用して、アプリが行っている挿入、更新、および削除を追跡しています。変更を同期する時が来ると、トラッカーは変更を完全に報告しています。

ここに問題があります。サーバーへのデータの送信は非同期であり、時間がかかります。データを送信している間、アプリが動作し続け、テーブル内のデータをさらに変更し、変更トラッカーが変更を追跡し続けることを望みます。同期が完了したら、「tracker.clearChanges()」を呼び出して、サーバーに同期された変更を削除します。ただし、「tracker.clearChanges()」を呼び出すと、同期中に追加されたがまだ同期されていないものを含め、すべての変更がクリアされます。

「clearChanges()」を呼び出して、同期された変更のみを削除するにはどうすればよいですか? または、同期中にトラッカーが記録した変更を保持するにはどうすればよいですか?

ありがとう、

ビル・ホワイト

4

1 に答える 1

1

素晴らしい質問です。以前の変更トラッカーを終了し、次のような新しい変更トラッカーを開始することをお勧めします。

//  Keeps track of trackers
var curTrackerNbr = 0;
var curTracker = null;
var syncTracker = null;

function getChangeTracker() {
    return db.changeTrackers.create("orders_tracker_" + curTrackerNbr, ["orders_table", "invoice_table"]);
}

function beginSync() {
    //  end current tracking, start new one
    syncTracker = curTracker;
    syncTracker.endTracking();
    //  creating a tracker automatically turns it on...
    curTracker = getChangeTracker();
    //  Get data to be sync'd
    var syncData = syncTracker.getChangedRows();
    //  Perform sync
    syncDataToServer(syncData, onSyncSuccess, onSyncFailure);
}

function onSyncSuccess() {
    //  remove the syncTracker (for cleaning purposes)
    db.changeTrackers.drop(syncTracker.name);
}

function onSyncFailure() {
    if (window.confirm("Want to try again?")) {
        var syncData = syncTracker.getChangedRows();
        syncDataToServer(syncData, onSyncSuccess, onSyncFailure);
    }
}

//  Now, let's create our first change tracker.
curTracker = getChangeTracker();

上記のコードが私の言葉よりもよく説明してくれることを願っています!

ジョン...

于 2012-11-30T16:02:34.987 に答える