2013-02-11 72 views
1

我正在製作我的第一個主幹應用。我已啓用pushstate。在路由器中我有兩條路由。主幹路由器,pushstate和相關URL

'link1(/)' : 'link1Route',    
    'link2(/)' : 'link2Route' 

在我的鏈接1頁,我有一個鏈接指向像這樣鏈接2:

<a href="link2">Link2</a> 

我點擊鏈接,路由器接管和我去link2Route預期。但是,如果我將鼠標懸停在鏈接上,狀態欄會指示該鏈接位於domain.com/link1/link2而不是domain.com/link2。鑑於link1頁面上的相對url結構,這是正確的。不幸的是,如果用戶決定在新窗口或選項卡中打開鏈接,骨幹路由器將不會生效。這是預期的,因爲在新窗口或標籤中打開會導致從服務器加載新的頁面。問題當然是,domain.com/link1/link2不存在。

處理這種情況的方法有哪些?謝謝。

+1

嘗試更改您的主播到Link2 mateusmaso 2013-02-11 22:06:51

+0

哇,我認爲這樣做。這麼簡單,但並不適合我,因爲我沒有設置虛擬主機,所以最初它會轉到localhost/link2,即使我在localhost/backboneapp/link2中。太棒了,謝謝你!我會多玩一些,但看起來這是我需要的。 – landland 2013-02-12 00:49:01

回答

0

您必須在服務器級別提供正確的index.html - 因爲這是在JavaScript甚至加載到頁面之前。

http://readystate4.com/2012/05/17/nginx-and-apache-rewrite-to-support-html5-pushstate/

+0

我已經重寫了apache。這將涵蓋頁面將存在的場景。因此,在我的示例domain.com/link1和domain.com/link2中,如果由於共享鏈接中的Apache重寫規則而直接從書籤或頁面刷新加載,則兩者都可以工作。但是這並沒有考慮到我的問題是不應該存在的domain.com/link1/link2。 – landland 2013-02-12 00:36:17

2

由於mateusmaso指出,需要在您的鏈接目標更改爲 「/鏈接2」(即包括 「/」)。

此外,在實施pushState時,如果用戶請求「domain.com/link2」URL,請不要忘記您的服務器需要使用內容進行響應。如果您願意,響應可以是index.html,但服務器必須爲該URL返回一個頁面。

如果您返回所有Backbone相關URL的index.html,則當Backbone應用程序啓動時,路由處理代碼將被觸發並顯示正確的數據。

如果您想了解更多關於路由以及如何管理得當,而無需通過trigger: true調用navigate時,請查看此頁無樣本的PDF 32-46:http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf(全面披露,我是這本書的作者)

+0

謝謝大衛。我會檢查你的pdf。我已經完成了你的Marionette教程,他們對我非常有用。我相信這本書將是相同的:) – landland 2013-05-21 02:40:35

+0

謝謝,我正在盡我所能寫一本書,這將有助於讀者在很多層面上有用。但是,如果您只想瞭解更多關於路由的信息,那麼示例pdf應該足夠了。 – 2013-05-21 07:36:40