Ember数据本地存储适配器查找总是被拒绝

Ember Data LocalStorage Adapter find always rejected

本文关键字:拒绝 查找 适配器 数据 存储 Ember      更新时间:2023-09-26

我使用的是带有本地存储适配器版本0.4.0的ember data beta 11(也使用0.3.2进行了测试),但当我尝试find方法时,当我将其用于查询时,它总是会被拒绝。

例如:这适用于

this.store.find('segment');

但这不起作用,并且总是返回一个被拒绝的承诺,其原因设置为未定义的

this.store.find('segment',{locked:false});

这可能是什么原因?

编辑

显然,第一个答案不是正确的,但它澄清了一些问题,在Ember中,当你创建一条记录时,它不会保存到localstorage,它只缓存在存储中,所以当你执行查找时,它什么也找不到,因为存储中没有存储任何东西,所以你也需要保存记录。

像这样

var record = this.store.createRecord("model",hash);
record.save();

我没有做record.save(),这是我问题的主要原因。

有关更多信息,请参阅Ember:持久记录

(如注释中所述)我在应用查询时遇到了同样的问题,例如您的{locked:false}事例。但我不认为添加save是正确的解决方案。如果(并且仅当)您有与查询匹配的记录,它将纠正这种情况。如果没有,那么由于某种原因,查找将失败。考虑到本地存储在第一次使用时可能是空的,这就成了一个问题。

如果你退房http://emberjs.com/guides/getting-started/using-other-adapters/关联的jsbin包含以下代码,用于使用isCompleted布尔值进行查找。它使用过滤器not find。

return this.store.filter('todo', function (todo) {
      return !todo.get('isCompleted');
    });

在你的情况下,我相信以下内容就足够了,包括在一个空的本地存储上

return this.store.filter('segment', function (todo) {
      return !todo.get('locked');
    });

这可能是一个更好的选择。更改localstorage_adapter的findQuery方法以返回一个空数组,而不是一个reject。

findQuery: function (store, type, query, recordArray) {
  var namespace = this._namespaceForType(type);
  var results = this.query(namespace.records, query);
  if (results.get('length')) {
    return this.loadRelationshipsForMany(type, results);
  } else {
    //return Ember.RSVP.reject();  Remove this
     **return Ember.RSVP.resolve([]); // Return an empty error not a 'reject'**
  }
},