将 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 路由。