2013-12-21 140 views
1

我有兩個路由器,每個都有一個路由。第一個路由器,可以稱之爲頁面路由器,通過繪製頁面傢俱(頁眉,頁腳等)來處理路徑:""。第二個路由器模塊路由器通過在頁面中間顯示所選程序的配置來處理散列路由":program/config"骨幹路由器和頁面刷新

用戶通過轉到主頁啓動應用程序:http://host/service/home.html。這會導致頁面路由器繪製主頁。用戶從菜單中選擇一個程序配置,並將URL更改爲:http://host/service/home.html#ABC/config。這會導致模塊路由器顯示正確的模塊。

問題是,當頁面刷新時,只有模塊路由器被調用。頁面正確地呈現模塊內容,但菜單消失 - 頁面路由器未被調用。

我在做什麼錯?我該如何解決?

回答

0

您的頁面路由器有一個值爲""的路由,當您的網址爲abc/config時,該路由不存在。如果您刪除頁面路由器並僅保留模塊路由器會更好。

嘗試做你的應用程序來執行任何頁面路由器正在做onLoad時間,只留下一個路由器。

創建頁眉和頁腳在每個頁面上都是相同的,但不是路由器的工作。

+0

感謝您的回覆。難道abc/config是一個錨點,而不是url本身的一部分嗎?最後一點:我的應用程序中的頁眉/頁腳是通過骨幹網驅動的,而且它們本身就是複雜的對象,需要在路由器中配置資源 - 在頁面加載中配置我的整個應用程序是不對的,特別是一些配置是在子路由器中完成的。 –

+0

這似乎是在Backbone中做這種事情的方法:http://lostechies.com/derickbailey/2012/02/06/3-stages-of-a-backbone-applications-startup/從我能理解 - 您需要在某些模塊中封裝啓動邏輯(頭文件/頁腳渲染以及獲取它們所需的數據),取決於main.js中的該模塊(如果您使用require.js或類似$ doc加載事件)並在那裏啓動。然後,如果diff路由有不同的init,將它們添加到ure模塊並依賴它併爲該路由使用特定的init方法。 – justin