我拥有的
试图了解发生了什么以及如何控制它。我对尚未经过身份验证的用户有一个“公共”视图,对经过身份验证的用户有一个“主页”视图。这是我的路线配置:
app.start().then(function() {
//Replace 'viewmodels' in the moduleId with 'views' to locate the view.
//Look for partial views in a 'views' folder in the root.
viewLocator.useConvention();
//configure routing
router.useConvention();
router.mapRoute('home', 'viewmodels/home', 'Test App', true);
router.mapRoute('public', 'viewmodels/public', 'Test App', true);
router.mapRoute('set/:id', 'viewmodels/set', 'Set');
router.mapRoute('folder/:id', 'viewmodels/folder', 'Folder');
router.mapRoute('api', 'viewmodels/api', 'API Reference');
router.mapRoute('error', 'viewmodels/error', 'Error', false);
app.adaptToDevice();
//Show the app by setting the root view model for our application with a transition.
if (dataservice.isAuthenticated() === true) {
app.setRoot('viewmodels/shell', 'entrance');
router.navigateTo('home');
} else {
app.setRoot('viewmodels/public');
router.navigateTo('#/public');
}
router.handleInvalidRoute = function (route, params) {
logger.logError('No route found', route, 'main', true);
router.navigateTo('#/error');
};
});
问题
当我第一次运行该应用程序时,我未经过身份验证,并且收到错误:
Uncaught TypeError: Cannot call method 'lookupRoute' of undefined
源自于'router.navigateTo('#/public');'
line.
然后,当我尝试单击登录按钮时,我收到相同的错误:
define(['durandal/app', 'durandal/plugins/router', 'services/dataservice'], function (app, router, dataservice) {
var publicViewModel = function () {
self.logIn = function () {
app.setRoot('viewmodels/shell');
router.navigateTo('#/home');
};
但内容加载正确。当我通过单击(例如 /folder/2)导航到特定页面,然后将 url 更改为 /folders/2 (无效)时,如预期的那样,我在日志中收到“找不到路由”,但我遇到了其他一些问题:
- 我没有收到错误页面或任何错误(我认为我应该根据我的handleInvalidRoute)
- 如果我点击其他内容,网址不会更改,并且不会加载新内容,同样没有错误。
我认为我以某种方式破坏了路由,但我不确定如何破坏。我该如何纠正上述问题?
Screen: