获取Ember-Data REST响应值

时间:2013-07-22 14:50:38

标签: ember.js ember-data

Ember:1.0.0-rc.6

Ember-Data:e999edb(2013-07-06 06:03:59 -0700)

我进行REST调用(POST)以登录用户。 服务器响应没问题。 我需要来自服务器的ID,但我只获得带有“setTimeout”的ID。

我认为这不是正确的方法。

我的错误是什么?

在Controller中我打电话:

var login = App.Login.createRecord(this.getProperties("email", "password"));

login.on("didCreate", function(record) {
  console.log(record.get("id"));     // ID is null
  console.log(record.get("email"));
});

setTimeout(function() {
  console.log(login.get("id"));     // ID is available
  console.log(login.get("email"));
}, 500);

DS.defaultStore.commit();

1 个答案:

答案 0 :(得分:1)

你是对的 - 在ember-data中存在一个错误,materializeData事件基本上设置了id并解除了服务器响应,直到didCreate回调之后才会发生。所以正在发生的事情是,在你的login.on("didCreate" ....)回调中,记录还没有实现。

这似乎仍然是一个问题 - 请参阅此主题以获取更多信息:https://github.com/emberjs/data/issues/405#issuecomment-17107045

解决方法

你的工作很好,但更容易(更干净?)的一个是将你的回调动作包装在Ember.run.next中:

login.on("didCreate", function(record) {
  Ember.run.next(function() {
    console.log(record.get("id"));     // ID should be set
    console.log(record.get("email"));
  }
});

这样,至少你不需要处理超时。

我相信这可以通过延迟动作直到下一个运行循环来实现,到那时实现应该已经发生了。 More on the Ember run loop

来源:https://github.com/emberjs/data/issues/405#issuecomment-18726035