我在ember 2.6中有以下代码; ember-data 2.6.1
import Ember from 'ember';
export default Ember.Route.extend({
activate() {
var route = this;
var sessionId = localStorage.getItem('sessionId');
if (sessionId) {
localStorage.removeItem('sessionId');
this.store.findRecord('session', sessionId).then(function found(session) {
session.destroyRecord();
route.transitionTo('index');
});
} else {
this.transitionTo('sessions.new');
}
}
});
我有一个注销按钮,其hbs模板代码为:
<li>{{#link-to 'sessions.delete'}}{{fa-icon "fa-lock"}} Logout{{/link-to}}</li>
调用/ sessions / delete时执行Route.extend
代码!
我观察到的是REST调用的顺序是:
1) ***DELETE*** http://dozee.me:3000/api/sessions/<sessionId>
2) ***GET*** http://dozee.me:3000/api/sessions/<sessionId>
第二个REST请求抛出并发生错误,因为到那时会话/ cookie已经被清除。
我期望REST调用的顺序实际上应该是反向的,但我无法弄清楚为什么它不是那样的!
任何指针&amp;提示将不胜感激;)
答案 0 :(得分:1)
这可能是因为ember已经在商店中拥有该会话并将该对象返回给您并稍后通过进行GET调用来尝试更新该对象。
这可能在删除后发生,因为已经使用商店对象解决了承诺。
你可以做的是先用peekRecord在商店中查找会话对象,只有在商店中找不到对象时才调用findRecord。
其他方式是使用一个forsed服务器调用findRecord for session,它不会被解析,直到从服务器返回对象。
希望这会对你有所帮助。