gpt4 book ai didi

javascript - 错误加载模型后,Ember Route 卡住了

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:13 24 4
gpt4 key购买 nike

在 ember 路由的模型回调中异步加载数据时,我遇到了一个烦人的问题。问题似乎是,如果我的路由的模型方法返回一个被拒绝的 promise ,那么该路由将永远不会尝试重新评估该路由模型。它只是在下次尝试去那条路线时自动返回相同的拒绝 promise ,甚至没有尝试重新获取数据!

我从this answer了解到当尝试将 url 转换为模型时,ember 路由只会调用它的模型方法。我猜想在具有动态段的路由的情况下,如果它以前从未遇到过该特定动态段,则可能会调用它。

这是我的路由器设置。

window.App = Ember.Application.create({
LOG_TRANSITIONS: true,
LOG_TRANSITIONS_INTERNAL: true
});

App.Router.map(function() {
this.route('login');

this.resource('users', { path: '/users' }, function() {
this.resource('user', { path: '/:user_id' });
this.route('create', { path: '/create' });
});
});

这是我的路线。

App.UserRoute = Ember.Route.extend({
model: function(params) {
// This returns a promise
return App.User.fetch(params.user_id);
}
});

我对我的应用程序路由中的错误进行了一些特殊处理,以便因身份验证异常而失败的路由将用户重定向到登录屏幕。

App.ApplicationRoute = Ember.Route.extend({
actions: {
sessionExpired: function() {
this.controllerFor('login').set("tokenExpired", true);
this.transitionTo('login');
},
error: function(err) {
if (err.type === "TokenException") {
this.send('sessionExpired');
}
}
}
});

问题

  1. 我导航到 /users 路径
  2. 由于某种原因,我的 token 过期(不活动,无论什么......)
  3. 我导航到 /users/1 路线
  4. 路由的模型方法返回一个拒绝的 promise ,我被踢出登录屏幕
  5. 我重新登录并尝试导航回 /users/1 路径
  6. 路由会自动返回与上次相同的失败 promise ,然后我被踢出登录屏幕。 :(

我在想我想要的是在用户登录后清除所有评估的路由模型的某种方法。如果这是一个多用户系统并且一个用户注销并且另一个用户在没有登录的情况下登录同一台计算机刷新页面,那么新用户不应该从前一个用户的 session 中自动解析路由。

在我看来,这似乎是一个常见问题,但我找不到任何类型的应用程序范围内的无效缓存方法。我该如何解决?

最佳答案

我不确定 ember 数据在缓存清除功能中的位置,但这是一种方法

clearCache: function (type) {
var map = App.store.typeMapFor(type);
map.idToCid = {};
map.clientIds = [];
map.recordArrays = [];
map.findAllCache = null;
}

这是一个关于 ember firebase 库如何使用缓存清除处理失败查找的示例。

  delete store.typeMapFor(store.modelFor('user')).idToRecord[username];

完整示例在这里: https://github.com/firebase/emberFire/blob/master/examples/blog/js/app.js

关于javascript - 错误加载模型后,Ember Route 卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23541362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com