我正在使用带有localstorage适配器版本0.4.0的ember数据beta 11(也使用0.3.2进行测试),但是当我尝试使用find方法时,它总是在我使用查询时被拒绝。
例如: 这工作
this.store.find('segment');
但是这不起作用并且总是返回被拒绝的promise,其原因设置为undefined
this.store.find('segment',{locked:false});
可能是什么原因?
答案 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'**
}
},