在服务层中的Ember存储中推送数据并返回承诺

时间:2016-08-08 16:17:00

标签: javascript ember.js ember-data ember-cli

我正在使用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

如果有人指导我解决这些问题会很棒。

1 个答案:

答案 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路线,您正在提出请求。