我的ember应用程序使用1.11.3版本和ember-simple-auth(0.7.3)。所有路由必须设置AuthenticatedRouteMixin
并使用beforeModel
获取帐户信息,我认为这不是一个好方法。例如:
App.Route = Ember.Route.extend(AuthenticatedRouteMixin, {
beforeModel: function() {
Account.find().then(function(user) {
this.set('user', user);
})
},
setupController: function(controller, model) {
controller.set('model', model);
controller.set('user', this.get('user'));
}
});
App.ApplicationRoute = App.Route.extend();
我设置了一个jsbin:http://emberjs.jsbin.com/wipasusige/1/edit?html,js,console,output
如果我的所有路线都使用App.Route.extend();
,则问题是AuthenticatedRouteMixin
无效。
我使用Route.extent
设置所有路由beforeModel
以获取帐户信息是一种好方法吗?
也许有更好的方法来解决这个问题?
答案 0 :(得分:0)
由于此自定义只对AuthenticatedRouteMixin
有意义,因此在mixin中执行它是有意义的!
App.CustomAuthenticatedRouteMixin = AuthenticatedRouteMixin.extend({
beforeModel: function() {
// We do not want the default functionality to be removed
var superResult = this._super(transition);
var accountPromise =
Account
.find()
.then(function(user) {
this.set('user', user);
return superResult;
}.bind(this));
return accountPromise;
},
setupController: function(controller, model) {
controller.set('model', model);
controller.set('user', this.get('user'));
this._super(controller, model);
}
});
然后像在正常情况下使用AuthenticatedRoutMixin一样在路由中重复使用它。
Mixins允许从各种功能源编写类,这比从单个源类继承更灵活。
免责声明:上述代码只是一个概念,而不是一个完全可行的解决方案。您必须考虑如何在项目中实施它。