【问题标题】:in ember-data, when in the lifecycle is a newly created record's id available?在 ember-data 中,在生命周期中,新创建的记录的 id 何时可用?
【发布时间】:2012-10-12 22:00:33
【问题描述】:

在 ember-data 中使用 RESTAdapter。我在服务器上创建了一条记录,我需要获取新创建记录的 id。该 id 是从服务器传回的,我可以在返回的 json 中看到它。

然而,在 DS.Model 的 didCreate() 回调中,this.get('id') 是未定义的。

我也尝试添加一个 record.one('didCreate',aClass,aClass.onDidCreate) 并检查 newRecord.get('id') 但它也是未定义的。

在 createRecord() 之后似乎没有调用 didCommit 回调,所以我不确定我应该在哪里检查生命周期回调。有人知道吗?

【问题讨论】:

  • 这似乎返回的 json 不适合 RESTAdapter。可以发一下吗?
  • @sly7_2 我认为这不是问题,但这是 JSON:{"track":{"width":-1,"height":-1,"name":"5dplusgrip .jpg","id":270,"asset_id":295}}
  • 好的,对,JSON 看起来没问题。你能发布更多的上下文吗?例如模型、如何执行请求、存储/适配器代码...您还可以将 newRecord.get('id') 包装在 Ember.run.next() 中,在 didCreate 回调中。
  • 我认为这是github.com/emberjs/data/issues/405中讨论的一个错误
  • 感谢您的确认 pangratz。目前我在下面的答案中创建了一个执行 addObserver() 的 mixin,并且我在模型上触发了一个自定义操作,“idWasCreated”。

标签: ember.js ember-data


【解决方案1】:

我不知道返回的 id 的钩子是什么,但我一直在 'id' 上设置一个观察者来触发这样的方法:

record.addObserver('id', this, 'actionToFire');

这似乎可以解决问题。

更新:记住removeObserveractionToFire,这样他们就不会堆积起来!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多