试图理解Backbone.js视图之间的路由
Trying to understand Backbone.js routing betwen views
我是一个很新的骨干,并试图了解它的概念。我试图创建一个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});
}
});
通用登录路由保护似乎有效,但我不确定这是否是最好的方法(因为视图本身不受认证保护,只有路由)。
我的问题是,我不确定如何处理登出。这个想法是,用户被扔回登录页面,如果他再次登录,他应该被路由到他按下注销按钮时来自的同一个视图。
当前的想法是简单地召回相同的路由,以便调用login函数,但是如果导航函数试图导航到它已经在的路由,backbone似乎不会做任何事情。在这种情况下,调用view .render()方法也不是选项,因为它绕过了身份验证代码(它只在路由上)。
on如何处理骨干?我是不是把事情复杂化了?身份验证保护应该放在视图本身吗?我想了想,但找不到一个看起来不太复杂的解决方案。
我重写了路由器的execute函数,如下所示
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});
}
相关文章:
- 根据某些条件在视图之间切换
- 如何在rapaidjs中的视图之间共享数据
- angularJS:如何打破模型和视图之间的链接
- 在同一控制器上的视图之间切换
- 在主干中的视图之间传递值
- 骨干事件触发不同视图之间的协调
- 在两个视图之间来回转换
- titanium:窗口和视图之间的区别
- 在主干.js视图之间传递消息
- 如何在 dialog() 模式弹出窗口中的部分视图之间保留字段数据
- 在不同的视图之间共享相同的操作/功能
- 在视图之间移动时,主干会丢失下拉事件
- AngularJS:使用不同的控制器保持不同视图之间的视图状态
- 角度如何在搜索和结果视图之间切换并传递数据
- 在 AngularJS 中的视图之间保留 GoogleMaps 映射对象
- 在 Ionic 上的视图之间共享数据
- SugarCRM 7-如何在视图之间共享代码
- SAPUI5:如何在两个视图之间筛选列表
- Titanium Mobile固定背景视图之间的图像
- 如何在AngularJS中的视图之间移动$routeProvider时阻止$destroy-of-scope