在Sencha Touch 2中,我在路线之前有一个beforeFilter。
当用户想要访问某个视图时,“beforeFilter”会先行动。
我使用过滤器进行身份验证检查和其他事情。 我保持这个例子非常简单,突出我需要帮助的地方:
Ext.define("TestApp.controller.Router", {
extend: "Ext.app.Controller",
config: {
before: {
home: 'beforeFilter',
login: 'beforeFilter',
products: 'beforeFilter'
},
routes: {
'': 'home',
'home' : 'home',
'login' : 'login',
'products' : 'products',
'products/:id': 'product',
}
},
beforeFilter: function(action) {
// The before filter acts before the user gets to any of the routes.
// Check the user's authentication state.
// If the user wants to visit the "products" route and he ISNT't authenticated,
// Redirect the user to the login page.
this.redirectTo('login');
// else - go to the normal root.
action.resume();
},
home: function () {
// This and the functions bellow handle the display of the routes.
},
login: function () {
},
products: function () {
}
});
问题。
用户想要查看产品路线,但未登录。
beforefilter 会介入,并将用户重定向到登录页面。
这是我需要帮助的地方:
如果用户在登录页面上并单击触发Sencha的history.back()事件的按钮,则用户将被重定向到产品页面,AGAIN , beforefilter 介入,将他重定向回登录视图。
基本上,历史将不再有效。
要解决问题,我需要一种方法来阻止产品路由登录 Sencha的历史记录对象经过身份验证。
你们有其他想法吗?
我问了一个更普遍的问题,但是这个问题特别对这个问题有了更多的记录。
答案 0 :(得分:0)
对于您不希望获得历史记录支持的视图,只需在不使用redirectTo
的情况下添加/更改视图。
直到视口:
Ext.Viewport.add({xtype: 'myloginview'})
或导航视图(在控制器中):
this.getMyNavView().push({xtype: 'myloginview'})
这样,url不会更改为#login,也不会添加到历史堆栈。