触发PUT请求时,Ember数据不发送id

时间:2014-08-11 13:53:47

标签: ember.js ember-data

有人知道我该怎么办?

所以,我在我的控制器中执行以下代码:

this.get('newEvent').save();

它获取我的数据并将其发送到服务器。这是一些数据

请求网址:http://localhost:1337/api/v1/events/53a9cfee701b870000dc1d01

要发送的数据:

   event:{
      date: "Mon, 18 Aug 2014 07:00:00 GMT"
      host: "Host"
      repeatable: true
      title: "Event name"
    }

但是为了成功,我需要知道我的服务器上的模型ID,它通常包含在我发送的event对象中。你知道任何解决方案吗?顺便说一句,DELETE请求不会从id对象中排除event

2 个答案:

答案 0 :(得分:1)

您可以通过覆盖RestAdapter中的updateRecord挂钩轻松覆盖保存行为以包含ID:https://github.com/emberjs/data/blob/master/packages/ember-data/lib/adapters/rest_adapter.js#L457以与includeId: true相同的方式传递{{1}} https://github.com/emberjs/data/blob/master/packages/ember-data/lib/adapters/rest_adapter.js#L436

答案 1 :(得分:0)

有几种方法可以解决这个问题,这取决于个人偏好。但我建议更改后端代码以从URL中提取ID。通常在定义put请求时,就像/ events /:event_id一样。如果您在后端以这种方式执行此操作,则无需将其发送到您发送的事件对象中。

API / V1 /活动/的 53a9cfee701b870000dc1d01

您可以通过查看发送过的URL参数在服务器上捕获此信息。如果您在后端使用Express,则可以毫不费力地直接从URL获取ID。我还没有发表评论,但让我知道你的后端结构,我可以指出你正确的方向。可能包括您在后端编写的PUT请求作为参考点。

你可以做的另一件事(不推荐,但会起作用)是在保存之前存储一个临时id。

var id = this.get('newEvent');
this.get('newEvent').set('temp_id', id).save();

然后您可以访问服务器调用上的temp_id,而无需检查服务器调用上的param_id。