Javascript 登录到Ember.js

Javascript 登录到Ember.js,javascript,ember.js,Javascript,Ember.js,我在embercasts和stackoverflow的一些帖子的帮助下实现了登录 它可以工作,但感觉不好,因为使用了ApplicationController和LoginController 登录应该让我完成两件事 隐藏不需要/不可用的GUI元素 防止使用特定路线 要隐藏检查模板中登录状态所需的元素。因此,我为ApplicationController创建了一个loggedIn属性。我不知道如何做这不同,但它感觉像一个全局(坏)变量 AC还实现了注销,这在整个页面上都是必需的,但似乎也很糟糕,因

我在embercasts和stackoverflow的一些帖子的帮助下实现了登录

它可以工作,但感觉不好,因为使用了
ApplicationController
LoginController

登录应该让我完成两件事

  • 隐藏不需要/不可用的GUI元素
  • 防止使用特定路线
  • 要隐藏检查模板中登录状态所需的元素。因此,我为
    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甚至为此提供了“需要”属性。