gpt4 book ai didi

javascript - Ember : Prevent transition based on response

转载 作者:行者123 更新时间:2023-12-03 09:42:57 26 4
gpt4 key购买 nike

在 Ember.js 中,如何根据响应有条件地阻止转换?

例如,如果服务器返回 403(在模型 Hook 中),则显示警报并且不转换。

这是一件简单而常见的事情,但我找不到任何文档或指南来做到这一点。

这就是我目前所拥有的

Ember.Route = Ember.Route.extend(InfinityRoute, {
actions: {
error: function(error){
if (error.status === 403) {
this.store.createRecord('notice', {
message: "You are not authorized to view this content. Sorry man."
});
}
}

该通知有效,但我想中止转换。它可能必须移动到另一个位置,因为当运行此错误 Hook 时,转换已经发生

最佳答案

实际上,从 model Hook (或 afterModelbeforeModel)返回被拒绝的 Promise 本身就会导致转换失败(无法继续) )。所以你不需要做任何特别的事情来中止转换。如果你想弹出一个对话框或其他东西,那么:

model: function() {
var model = this.store.find('my-model');
model . catch(displayErrorMessage);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
return model;
}

如果出于某种原因您更愿意显式中止转换,请使用第二个参数来执行此操作:

model: function(params, transition) {
^^^^^^^^^^
return this.store.find('my-model') .
catch(() => { displayErrorMessage(); transition.abort() });
^^^^^^^^^^^^^^^^^^
}

model Hook 中的中止转换在指南页面“防止和重试转换”中进行了描述,网址为 http://guides.emberjs.com/v1.10.0/routing/preventing-and-retrying-transitions/ :

ABORTING TRANSITIONS WITHIN model, beforeModel, afterModel
The model, beforeModel, and afterModel hooks described in Asynchronous Routing each get called with a transition object. This makes it possible for destination routes to abort attempted transitions.

如果您想捕获所有失败的ajax请求并对其执行某些操作,则可以使用ajaxComplete调用。这本身不是 Ember,而是 jQuery。在那里放置您的对话框或消息。转换本身将因 ajax 错误而自动中止,导致 this.store.find 的 promise 进入拒绝状态。或者自己中止它。

请注意,如果您正在使用加载子状态,则不可能中止转换并保持原样。已经太晚了。

EAGER VS. LAZY ASYNC TRANSITIONS
...once you provide a destination route loading substate, you are opting into an "eager" transition, which is to say that, unlike the "lazy" default, you will eagerly exit the source routes (and tear down their templates, etc) in order to transition into this substate.

关于javascript - Ember : Prevent transition based on response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31132690/

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