余烬 | beforeModel 钩子在模型钩子之后触发
emberjs | beforeModel hook is firing after model hook
我有一个定义如下的 mixin。
import Ember from 'ember';
export default Ember.Mixin.create({
loggedinUser: {},
beforeModel() {
if (!this.get('AuthService').isAuthenticated()) {
this.transitionTo('login');
}
this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});
} }
});
我在我的路由中导入如下
import UnAuthenticatedRouteMixin from '../mixins/un-authenticated-route-mixin';
export default Ember.Route.extend(UnAuthenticatedRouteMixin, {
model(){
this._super(...arguments);
alert("in model");
alert(this.loggedinUser.requestorId);
}
});
我预期的警报顺序是 "in before model " -> “1234”、"in model"、“1234”。然而,警报的实际顺序是 "in model " -> "undefined", "in before model" , "1234"
如何确保 beforeModel 钩子在模型钩子之后触发。
我正在申请强制执行订单的一种解决方法是 return 来自 beforeModel 挂钩的承诺,以便模型挂钩等待该承诺的解决。 mixin 代码更改为如下所述。但是,有没有更好的方法来处理这种情况?
import Ember from 'ember';
export default Ember.Mixin.create({
loggedinUser: {},
beforeModel() {
if (!this.get('AuthService').isAuthenticated()) {
this.transitionTo('login');
}
return this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});
} }
});
您的问题是 beforeModel
挂钩在 model
挂钩之前执行,但承诺 return 来自 getLoggedinUser
returnes。
然而,路由器将等待 promise 解决,所以解决方案很简单:只是 return promise!
所以替换这个:
this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});
有了这个:
return this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});
我有一个定义如下的 mixin。
import Ember from 'ember';
export default Ember.Mixin.create({
loggedinUser: {},
beforeModel() {
if (!this.get('AuthService').isAuthenticated()) {
this.transitionTo('login');
}
this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});
} }
});
我在我的路由中导入如下
import UnAuthenticatedRouteMixin from '../mixins/un-authenticated-route-mixin';
export default Ember.Route.extend(UnAuthenticatedRouteMixin, {
model(){
this._super(...arguments);
alert("in model");
alert(this.loggedinUser.requestorId);
}
});
我预期的警报顺序是 "in before model " -> “1234”、"in model"、“1234”。然而,警报的实际顺序是 "in model " -> "undefined", "in before model" , "1234"
如何确保 beforeModel 钩子在模型钩子之后触发。
我正在申请强制执行订单的一种解决方法是 return 来自 beforeModel 挂钩的承诺,以便模型挂钩等待该承诺的解决。 mixin 代码更改为如下所述。但是,有没有更好的方法来处理这种情况?
import Ember from 'ember';
export default Ember.Mixin.create({
loggedinUser: {},
beforeModel() {
if (!this.get('AuthService').isAuthenticated()) {
this.transitionTo('login');
}
return this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});
} }
});
您的问题是 beforeModel
挂钩在 model
挂钩之前执行,但承诺 return 来自 getLoggedinUser
returnes。
然而,路由器将等待 promise 解决,所以解决方案很简单:只是 return promise!
所以替换这个:
this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});
有了这个:
return this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});