【问题标题】:Trying to understand Backbone.js routing betwen views试图理解 Backbone.js 视图之间的路由
【发布时间】:2023-03-10 15:42:01
【问题描述】:

我对骨干很陌生,并试图理解它的概念。我正在尝试创建一个backbone.js 应用程序(带有下划线模板),其中一些视图受登录页面的保护,并且它们上还有一个注销按钮。

这个想法是,如果未登录的用户导航到特定视图,他应该会看到一个登录页面,并且一旦他登录就会重定向到他最初尝试访问的视图。代码是这样的

router code

routes: {
    ""                  : "home",
    "authView"             : "authView",
},

login: function(view) {
        if(isUserLoggedIn()) {
            $('#content').html(view.el);
        } else {
            var loginView = new LoginView(view.model)
            $('#content').html(loginView.el);
            app.vent.on("login:success", function(){
                loginView.remove();
                $('#content').html(view.el);
            });
        }
    },

authView: function() {
    this.login(new authView());
}

authView

AuthView = Backbone.View.extend({

  events: {
    "click #logoutbutton": "logout"
  },

  initialize:function () {
    this.render();
  },

  render:function () {
    $(this.el).html(this.template(this.model));
    return this; 
  },
  logout:function (e) {
    e.preventDefault();
    logUserOut();
    app.router.navigate("authView", {trigger:true});
  }
});

通用登录路由保护似乎有效,但我不确定这是否是最好的方法(因为视图本身不受身份验证保护,只有路由)。

我的问题是我不确定如何处理注销。这个想法是,用户被抛回登录页面,如果他再次登录,他应该被路由到他按下注销按钮时所来自的同一个视图。

当前的想法是简单地调用相同的路由,以便调用登录函数,但是如果导航函数试图导航到它已经在的路由,主干似乎不会做任何事情。同时调用视图 .render( ) 方法在这种情况下不是选项,因为它绕过了身份验证代码(仅在路由上)。

on 如何在主干中处理该问题?我是不是把事情复杂化了?身份验证保护是否应该放在视图本身中?我想到了这一点,但无法得出一个看起来不太复杂的解决方案。

【问题讨论】:

标签: javascript backbone.js model-view-controller


【解决方案1】:

我重写路由器的执行功能如下

execute: function (callback, args, routeName) {
    // ..
    if ( /* Check if user is not authenticated */ ) {
        Backbone.history.navigate("logout", {trigger: true});
        return;
    }
    if ( callback ) {
        callback.apply(this, args);
    }
}
//..
// logout route
logout: function () {
    // do the logout logic..
    // ..
    Backbone.history.navigate("login", {trigger: true});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2015-09-20
    • 2011-11-21
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多