Ember Data LocalStorage Adapter查找始终被拒绝

时间:2014-11-02 09:43:07

标签: javascript ember.js ember-data local-storage

我正在使用带有localstorage适配器版本0.4.0的ember数据beta 11(也使用0.3.2进行测试),但是当我尝试使用find方法时,它总是在我使用查询时被拒绝。

例如: 这工作

this.store.find('segment');

但是这不起作用并且总是返回被拒绝的promise,其原因设置为undefined

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

可能是什么原因?

2 个答案:

答案 0 :(得分:0)

修改

显然第一个答案不是正确的答案,但它清除了一点,在Ember创建记录时,它没有保存到localstorage,它只缓存在商店中,因此,当您执行查找时,它确实找不到任何内容,因为存储没有存储任何内容,因此您还需要保存记录。

喜欢这样

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

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

有关详细信息,请参阅Ember:Persisting Records

答案 1 :(得分:0)

(如评论中所述)我在应用诸如{locked:false}案例之类的查询时遇到同样的问题。但我不相信添加保存是正确的解决方案。如果(并且仅当)您有与查询匹配的记录,它将纠正这种情况。如果没有,那么发现将失败 - 出于某种原因。请记住,本地存储在首次使用时可能是空的,这会成为一个问题。

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

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

在你的情况下,我相信以下内容就足够了,包括空的localstorage

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

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

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'**
  }
},