2013-04-15 26 views
0

这里是我的路由器配置:路由器无法在DurandalJS找到页

 router.useConvention(); 

     router.mapRoute('error', 'viewmodels/error', "Error"); 

     router.mapNav('home'); 
     router.mapRoute('api', 'viewmodels/api', 'API Reference'); 
     router.mapRoute('set/:id', 'viewmodels/set', 'Set'); 
     router.mapRoute('folder/:id', 'viewmodels/folder', 'Folder'); 

     router.handleInvalidRoute = function (route, params) { 
      //debugger; 
      router.navigateTo('#/error'); 
     }; 

     logger.log('app has loaded :)', null, null, false); 

     return router.activate('home'); 

我能找到/ API和其他网页,但是当我在一个无效的路由类型,铬控制台给我以下内容:

enter image description here

我有error.js的error.html和就像其他页面。它在App/viewmodels/error.js中,但我不必指定具有任何其他视图/ vms的文件夹...为什么没有找到它?

编辑 每约瑟夫的建议,我的“错误”激活,我得到这个:

enter image description here

我很困惑...为什么它寻找error.js时,它已经找到它在正确的位置,为什么它认为它会在该位置找到一个html文档?

我有一个传统的文件结构:

enter image description here

+0

您发布的代码适用于Durandal入门套件中的新项目。有没有其他地方的路由器被操纵? –

+0

只是为了确保我搜索了我的整个解决方案,并且我没有对路由器进行任何其他调用......我不知道是什么原因造成的:/ – RobVious

+0

有很强的线索表明路由看起来很好(你不是得到“找不到路由”错误),但解决的路径不正确。根据我的经验,这通常是配置错误的路由器或require.config。你可能想尝试调用'router.activate('error');'而不是home,只是为了收集发生的事情的数据点。如果它在那里炸弹,你可以通过router.js代码来查看差异在哪里发生。 –

回答

1

它转的出你的问题在error.js本身。在Google网上论坛上申请您的文件后,我可以复制问题。

更改此:

define(['services/dataservice'], function (dataservice) { 
    var data = "error"; 
    return data; 
}) 

这样:

define(['services/dataservice'], function (dataservice) { 
    var data = "error"; 
    return {} 
}) 

你正在返回在这种情况下迪朗达尔假设你正在寻找在给定的“/应用程序/错误路径中的视图模型的字符串。 JS”。您应该返回某种您将用来绑定您的可观察对象的对象,等等。

+0

哇!我花了整整一天的时间来解决这个问题。不能相信它。非常感谢麦克。 – RobVious

+1

很好的发现人:)它真的帮助我。 – thangchung

-1

add this code: router.mapRoute('pagenotfound','viewmodels/pagenotfound','page not found',false );

相关问题