【发布时间】: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 如何在主干中处理该问题?我是不是把事情复杂化了?身份验证保护是否应该放在视图本身中?我想到了这一点,但无法得出一个看起来不太复杂的解决方案。
【问题讨论】:
-
Backbone 提供了一些
execute方法backbonejs.org/#Router-execute 的示例
标签: javascript backbone.js model-view-controller