【问题标题】:deleteRecord not getting called in ember-data未在 ember-data 中调用 deleteRecord
【发布时间】:2013-06-05 02:26:37
【问题描述】:

我正在为用于 Cordova 应用程序的 Web SQL 存储制作适配器。到目前为止,它进展顺利,除了由于某种原因根本没有调用 deleteRecord 方法。这是我的代码的摘录:

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 repo 可以在这里找到:https://github.com/eltiare/ember-cordova-storage

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    我没有编写自定义适配器的经验,但快速浏览一下你的测试,我看到你在调用 deleteRecord,但我没有看到对 commit 的调用

    为了让 ember-data 真正尝试删除您需要调用 commit 的记录。要提交 defaultTransaction,您可以执行以下操作:

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

    【讨论】:

    • 就是这样!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多