我有以下路线配置:
routes: {
'': 'landing_page',
':show_page': 'show_page',
'*actions': 'defaultAction'
},
“显示页面”包含的功能类似于:
show_page: function(page_name){
$.get('php/User/check_session.php', _.bind(function(status) {
if(status == "yes"){
switch(page_name){
case "home":
var home_View = new Home_View();
app.views.resultView.showView(home_View);
break;
case "parents":
var parent_View = new Parent_View();
app.views.resultView.showView(parent_View);
break;
case "insurers":
var insurer_View = new Insurer_View();
app.views.resultView.showView(insurer_View);
break;
case "new_role":
var new_roles_View = new New_roles_View();
app.views.resultView.showView(new_roles_View);
break;
case "roles_permissions":
var roles_permissions_View = new Roles_permissions_View();
app.views.resultView.showView(roles_permissions_View);
break;
case "user_roles":
var user_roles_View = new User_roles_View();
app.views.resultView.showView(user_roles_View);
break;
case "new_accounting":
var input_accounting_View = new Input_accounting_View();
app.views.resultView.showView(input_accounting_View);
break;
default:
var home_View = new Home_View();
app.views.resultView.showView(home_View);
this.navigate("/home", {trigger:true});
break;
};
etc...
现在问题是我想得到类似的路线:
':show_page/:second_parameter': 'show_page_with_parameter'
问题是我可以用条件管理所有事情(转换,或者......等等):
例如。如果父页面,则参数为parent_id。但是如果是new_role页面,那么参数是role_id。
但我已经觉得好像我弄乱了路由器的js文件。
这是正确的做事方式,还是建议我以不同的方式处理这件事?
答案 0 :(得分:0)
我将摆脱switch语句并在您的路由对象中明确定义所有路由 - 它更容易理解并且一目了然地查看所有路线。
routes: {
'': 'landingPage',
'home': 'home',
'parents': 'viewParents',
'parents/:id': 'getParents',
...
'*actions': 'defaultAction'
},
除此之外,您的处理程序现在非常简单,但将来可能会发生变化。大多数人可以使用:
function setView (view, options) {
app.views.resultView.showView(new view(options));
}
使用某种登录验证:
function isLoggedIn() {
return $.get('php/User/check_session.php').then(function (status) {
if (status !== 'yes')
throw new Error('Not logged in');
});
}
或者使用视图设置器添加登录验证:
function setAuthenticatedView (View, options) {
return function () {
isLoggedIn().then(function () {
setView(View, options);
});
}
}
所有在一起:
permissionsView: setAuthenticatedView(Permissions_view, {}),
parentsView: setAuthenticatedView(Parents_view, {}),
通过这种方式,您可以在没有巨型switch语句的情况下扩展具有额外功能的路由,对于简单路由,您可以轻松读取源代码并查看,这些是经过身份验证的视图,并且它们只是设置了简单的骨干视图。