我正在使用ember 2.7.0在我的一个ember服务中,我返回一个硬编码(然后调用休息端点)数据而不是我想用硬编码数据返回promise。在控制器中,如果承诺成功,则将硬编码数据推送到余烬存储,否则返回错误对象。我是全新的ember,所以我不知道如何实现这一点。
以下是我的服务文件
customer.js
import Ember from 'ember';
export default Ember.Service.extend({
getIndividualCustomer(id) {
// return Ember.$.ajax({
// url: `/api/v1/customers/${id}`,
// type: 'GET'
// });
return {
"customerId" : "38427357",
"productName":[{
"product":[{
"name":"sample1",
"status":"Active"
},{
"name":"sample2",
"status":"Active"
}]
}]
};
}
});
在上面的服务类中,我不应该返回硬编码的json,而应该返回RSVP promise以及这些数据。
以下是我的控制器文件
index.js
import Ember from 'ember';
export default Ember.Controller.extend({
customer: Ember.inject.service(),
actions: {
searchCustomer: function() {
this.store.push(this.store.normalize('customer', this.get('customer').getIndividualCustomer(this.get('inputID'))));
this.transitionToRoute('customers.view', this.get('inputID'));
},
}
});
下面是我的序列化文件
customer.js
import ApplicationSerializer from './application';
export default ApplicationSerializer.extend({
primaryKey: 'customerId'
});
上述代码中要解决的3件事:
1)必须从服务中返回承诺以及数据。
2)如何获取推送数据(希望我正确推送数据)。
3)在运行上面的代码时,我得到以下异常,
Error: Ember Data Request GET /api/v1/customers returned a 404
如果有人指导我解决这些问题会很棒。
答案 0 :(得分:1)
1)问题的第一部分非常简单。在您的服务中,您可以这样做:
import Ember from 'ember';
export default Ember.Service.extend({
getIndividualCustomer(id) {
return new Ember.RSVP.Promise(function(resolve) {
resolve({ ...data...});
})
}
2)在您的控制器操作中,您已将数据推送到商店。因此,一旦转换到customers.view
路线,您就可以通过ID
检索现在在商店中的客户。在customers.view
路由的模型钩子中,执行以下操作:
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
return this.store.find('customer', params.id)
}
})
然后在控制器中,您可以访问您在路径模型钩子中检索到的客户。
3)很难解决,因为上面列出的代码(注释掉的代码除外)都不应该向服务器发出请求。此外,您拥有的1 ajax请求(已注释掉)也不会向/customers
发出请求/customers/:id
。很可能是路线中的其他地方,可能是customers
路线,您正在提出请求。