2012-11-30 26 views
3

我使用SequelSphere作爲我的HTML5客戶端數據庫。我還使用「更改跟蹤器」來跟蹤我的應用正在執行的任何插入,更新和刪除操作。當需要同步更改時,跟蹤器會完美地報告更改。如何保持同步期間發生的DBChangeTracker中的更改?

這裏的問題:數據的服務器發送是異步的,並且需要一些時間。在發送數據時,我希望應用程序繼續工作,更改表中的更多數據,並讓更改跟蹤器繼續跟蹤更改。同步完成後,我會調用「tracker.clearChanges()」以刪除同步到服務器的更改。但對「tracker.clearChanges()」的調用將清除所有更改,包括在同步期間添加但尚未同步的更改。

我怎麼能稱之爲「clearChanges()」,只有刪除同步時間的變化?或者我如何保持跟蹤器在同步發生時記錄的更改?

感謝,

比爾懷特

回答

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

我希望上面的代碼解釋它比我的話更好!

約翰...

+0

我認爲這種方法將起作用。我會試一試。 –

相關問題