将 Ember 中的数据推送到服务层并 return 承诺
Push data in Ember store in service layer and return promise
我正在使用 ember 2.7.0 在我的一项 ember 服务中,我正在 return 使用硬编码(尚未调用休息端点)数据,而不是 return 硬编码数据的承诺。在控制器中,如果承诺成功,则将硬编码数据推送到 ember 存储,否则 return 错误 object.I 对 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"
}]
}]
};
}
});
在上述服务中 class 而不是 return 硬编码 json 我应该 return RSVP 承诺连同此数据。
下面是我的控制器文件
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) 必须 return 服务承诺连同数据。
2)如何获取推送的数据(希望我推送的数据正确)。
3) 虽然 运行 以上代码我得到以下异常,
Error: Ember Data Request GET /api/v1/customers returned a 404
如果有人指导我解决这些问题就太好了。
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) 很难解决,因为 none 您在上面列出的代码(注释掉的代码除外)应该向服务器发出请求。此外,您的 1 ajax 请求(已注释掉)不会向 /customers
发出请求,而是向 /customers/:id
发出请求。您可能正在路由的其他地方发出请求,可能是 customers
路由。
我正在使用 ember 2.7.0 在我的一项 ember 服务中,我正在 return 使用硬编码(尚未调用休息端点)数据,而不是 return 硬编码数据的承诺。在控制器中,如果承诺成功,则将硬编码数据推送到 ember 存储,否则 return 错误 object.I 对 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"
}]
}]
};
}
});
在上述服务中 class 而不是 return 硬编码 json 我应该 return RSVP 承诺连同此数据。
下面是我的控制器文件
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) 必须 return 服务承诺连同数据。
2)如何获取推送的数据(希望我推送的数据正确)。
3) 虽然 运行 以上代码我得到以下异常,
Error: Ember Data Request GET /api/v1/customers returned a 404
如果有人指导我解决这些问题就太好了。
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) 很难解决,因为 none 您在上面列出的代码(注释掉的代码除外)应该向服务器发出请求。此外,您的 1 ajax 请求(已注释掉)不会向 /customers
发出请求,而是向 /customers/:id
发出请求。您可能正在路由的其他地方发出请求,可能是 customers
路由。