2013-07-22 52 views
1

烬:1.0.0-rc.6获取灰烬,数据REST响应值

烬-数据:e999edb(2013年7月6日6时03分59秒-0700)

我做一个REST呼叫(POST)登录一个用户。 服务器响应正常。 我需要从服务器的ID,但我只有“setTimeout”的ID。

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

我的错误是什么?

在控制器I拨打:

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

你是对的 - 有一个错误在灰烬数据,其中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

+0

谢谢!在我的情况下,我现在可以使用一个观察员的ID。 idObserver:function(){ /* ... */ } .observes(“id”) –

+0

是这个解决方案的工作,我已经尝试了更多的时间。这不起作用,并且记录被实现为从中获取id,但id仍然返回null – Amerrnath