2013-04-15 25 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 );

相關問題