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();
答案 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