2013-06-05 47 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