Javascript 登录到Ember.js
我在embercasts和stackoverflow的一些帖子的帮助下实现了登录 它可以工作,但感觉不好,因为使用了Javascript 登录到Ember.js,javascript,ember.js,Javascript,Ember.js,我在embercasts和stackoverflow的一些帖子的帮助下实现了登录 它可以工作,但感觉不好,因为使用了ApplicationController和LoginController 登录应该让我完成两件事 隐藏不需要/不可用的GUI元素 防止使用特定路线 要隐藏检查模板中登录状态所需的元素。因此,我为ApplicationController创建了一个loggedIn属性。我不知道如何做这不同,但它感觉像一个全局(坏)变量 AC还实现了注销,这在整个页面上都是必需的,但似乎也很糟糕,因
ApplicationController
和LoginController
登录应该让我完成两件事
ApplicationController
创建了一个loggedIn
属性。我不知道如何做这不同,但它感觉像一个全局(坏)变量
AC还实现了注销,这在整个页面上都是必需的,但似乎也很糟糕,因为它在后台使用LC
App.ApplicationController = Ember.Controller.extend({
loggedIn: false,
actions: {
logout: function() {
var loginCtrl = this.controllerFor('login');
loginCtrl.set('token', null);
this.set('loggedIn', false);
this.transitionToRoute('landingpage');
}
}
});
这是ApplicationRoute
,它还使用LC检查状态
App.ApplicationRoute = Ember.Route.extend({
setupController: function(ctrl) {
var loginCtrl = this.controllerFor('login');
if(loginCtrl.get('token')) {
ctrl.set('loggedIn', true);
} else {
ctrl.set('loggedIn', false);
}
}
});
有没有更好的方法来做到这一点,而不耦合AC和LC?
比如在每个模板中从LC获取登录状态
或者我应该放弃LC并在AC中实现此逻辑,因为它到处都需要?我同意blessenm的观点,从其他控制器调用控制器完全可以 此外,遵循oop范例,我建议通过仅将登录/注销/身份验证职责指定给
LoginController
来实现更高的内聚性
因此,令牌将成为LC及其维护的一部分,如检查是否通过功能登录、通过注销功能将其取消设置等。然后可能会有一个基本privaterote
(或重新打开Em.Route
)将使用此控制器。如果需要登录用户,所有其他路由将从此路由扩展。注销操作可由ApplicationController
处理,但始终调用LC
的注销功能
这里给出了路由的粗略示例,但为了简洁起见,并没有使用特殊的控制器
我的意见是,我们的方法没有错。控制器有时需要另一个控制器。Enber甚至为此提供了“需要”属性。