1

余烬:1.0.0-rc.6

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

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

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

我的错误是什么?

在控制器中我调用:

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();
4

1 回答 1

1

你是对的——在 ember-data 中存在一个错误,该事件基本上设置了 id 并解开服务器响应,直到回调materializeData之后才会发生。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"));
  }
});

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

我相信这是通过将动作延迟到下一个运行循环来实现的,到那时物化应该已经发生了。更多关于 Ember 运行循环

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

于 2013-07-23T00:46:23.093 回答