我刚刚开始使用Ember 2.0,我正在尝试使用Ember Data构建一个简单的CRUD应用程序。我一直在网上关注Ember指南,但我遇到了一个问题。
我在我的routes / application.js文件中使用this.store.push
将默认数据填充到我的商店中。我立即使用this.store.findRecord(modelName, id)
后,似乎我的数据成功持久:
但是,当我使用this.store.findAll(modelName)
时,由于"适配器操作失败而得到404,"错误:
我已经做了一些搜索,但由于这样一个模棱两可的错误,我没有多少运气。如果有人有任何见解,我将非常感激!这是我用来创建控制台输出的代码:
var wine = this.store.findRecord('wine', 5);
var wines = this.store.findAll('wine');
console.log(wine);
console.log(wines);
我正在创建的模型示例:
this.store.push('wine', {
id: '5',
name: 'Pink Moscato',
vintage: '2014',
description: 'The wine has aromas of Mandarin orange and sweet ' +
'jasmine. It has subtle flavors of cherry, raspberry, and ' +
'pomegranate.',
imageUrl: 'https://placehold.it/290x290'
});
答案 0 :(得分:1)
this.store.findAll(modelName)
会向您的API后端发出HTTP请求。根据我的阅读,似乎您没有API服务器,并且您只使用store.push
来模拟Ember数据中的数据。所以,我建议你使用:
this.store.peekAll(modelName)
不会触发任何请求,并会为您提供本地数据。
我发现findRecord有效,而findAll没有。
findRecord
适用于您而findAll
不适用,因为findRecord
尝试获取本地版本的记录,这已经存在于您的案例中(您使用store.push
)并尝试在后台重新加载记录以获取最新数据(您应该在您的开发工具中看到即使使用findRecord
请求也会触发刷新它的数据。)
findAll
也被缓存,但它在第一次调用时会触发请求。
I recommend you to see my previous answer for more info and details of peekAll
and findAll
.
此外,在这种情况下,API服务器的示例是什么?
取决于您是否要使用RESTAdapter
或JSONAPIAdapter
。如果RESTAdapter
您的API服务器(到findAll('wine')
)的示例响应可能是:
{
"wines": [
{
"id": 5,
"name": "Pink Moscato",
"vintage": "2014",
"description": "text",
"imageUrl": "https://placehold.it/290x290"
}
]
}
我的印象是Ember Data可以单独使用。
是的,它可以单独使用,但你需要调整Adapter
。