2013-06-05 78 views
0

我正在製作適用於Cordova應用程序的Web SQL存儲器的適配器。到目前爲止,除了某些原因,deleteRecord方法根本沒有被調用之外,它還是非常好的。這裏是我的代碼的摘錄:deleteRecord沒有在ember-data中調用

DS.CordovaStorageAdapter = DS.Adapter.extend({ 
    // Other methods... 
    deleteRecord: function(store, type, record) { 
    console.info('Deleting!'); 
    var adapter = this; 
    var qr = new QueryRapper({id: record.get('id')}).tableName(this.tableName(type)); 
    var query = qr.deleteQuery(); 
    console.info(query); 
    function deleteSuccess(tx, results) { 
     adapter.didDeleteRecord(store,type,record); 
    } 
    return this.db.transaction(
     function(tx) { tx.executeSql(query, [], deleteSuccess); }, 
     function(err) { this.dbError(query, err, type, record); } 
    ); 
    }, 
    // Support methods... 
}); 

這裏是我的茉莉花測試:「刪除測試」

describe('EmberCordovaStorageAdapter', function() { 
    var m; 

    beforeEach(function() { 
    waitForDbInit(); 
    runs(function() { 
     m = App.TestModel.createRecord({ 
     string: 'String!', 
     number: 1234, 
     date: new Date(), 
     boolean: true 
     }); 
     m.save(); 
     waitForReady(); 
    }); 
    }); 

    // Other tests... 

    it('deletes a record', function() { 
    waitForReady(); 
    runs(function() { console.info('Deleting in test!'); m.deleteRecord(); waitForDeleted(); }); 
    runs(function() { expect(m.get('isDeleted')).toBe(true); }); 
    }); 

    function waitForDeleted(model) { 
    model = model || m; 
    waitForMessage(model, 'rootState.deleted.committed'); 
    } 

    function waitForReady(model) { 
    model = model || m; 
    waitForMessage(model, 'rootState.loaded.saved'); 
    } 

    function waitForMessage(model, msg) { 
    waitsFor(function() { 
     console.info(msg, model.get('stateManager.currentPath')); 
     return model.get('stateManager.currentPath') == msg; 
    }, 'model message: ' + msg, 1500); 
    } 
}); 

我在我的JS控制檯看到消息但不是「正在刪除!」的消息。 GitHub的回購可以在這裏找到:https://github.com/eltiare/ember-cordova-storage

回答

1

我沒有經驗編寫定製適配器,但是在您的測試看一眼我看到您的呼叫deleteRecord但我沒有看到commit

電話在爲了讓ember-data實際嘗試刪除需要調用commit的記錄。要提交defaultTransaction你可以做這樣的事情:

m.get('store').commit(); 
+0

這是它!非常感謝。 – eltiare