2012-02-21 64 views
2

我注意到中的骨幹應用我建,並想知道,如果這種行爲意味着可以預期的,或者如果我做錯了輕微的怪癖......包括根主幹航線

我火了Backbone.history像這樣:

Backbone.history.start({ 
    root: '/au/store/', 
    pushState: true, 
    silent: true 
}); 

爲了向後/向前按鈕導航觸發的路線,我需要他們建立這樣的:

router = Backbone.Router.extend({ 
    routes: { 
    'au/store/:slug' : 'slug', 
    'au/store/?*params' : 'params' 
    } 
}); 

這工作得很好。按照預期瀏覽瀏覽器歷史記錄到/au/store/?foo=bar會觸發'params'路線。

我有雖然是router.navigate()不會觸發路由問題:

router.navigate('?foo=bar', {trigger:true}); // route doesn't trigger 

添加根到URL不起作用或者:

router.navigate('au/store/?foo=bar', {trigger:true}); // navigates to /au/store/au/store/?foo=bar 

所以我的解決辦法目前使用的是運行所有路線兩次,一次以根爲前綴並且一次沒有:

routes: { 
    'au/store/:slug' : 'slug', 
    'au/store/?*params' : 'params', 
    ':slug' : 'slug', 
    '?*params' : 'params' 
} 

現在,它會通過router.navigate()觸發後退/前進路線。

但是,這似乎是一個黑客位,並一定會導致停機更復雜的路線軌跡問題......

任何人都可以向我解釋什麼,我做錯了,或者爲什麼不表現出我對它的期待?

+0

因此,這是固定的骨幹0.9.2 ,它現在按照它應該的方式工作(如同在這個問題的兩個答案中所述)。 – market 2012-06-06 02:37:14

回答

1

擺脫完整的網址,Backbone會自動爲您預先安裝根目錄。所以,只需要:

routes: { 
    ':slug' : 'slug', 
    '?*params' : 'params' 
    } 

你應該沒問題。

+0

當通過'router.navigate()'觸發路由時,此功能正常工作,但在使用後退/前進按鈕進行導航時無法識別路由。 – market 2012-02-22 00:19:05

+0

^如果我設置了一個'* params'路由,它會將整個'au/store/params'傳遞給回調... – market 2012-02-22 00:25:18

7

得到路由器

router = Backbone.Router.extend({ 
    routes: { 
    ':slug' : 'slug', 
    '?*params' : 'params' 
    } 
}); 

設置silentfalse火的路線

Backbone.history.start({ 
    root: '/au/store/', 
    pushState: true, 
    silent: false 
}); 

如果服務器已經呈現整個頁面擺脫網址,和你不不想在啓動歷史記錄時觸發初始路線,請傳遞無聲:真

參考 http://documentcloud.github.com/backbone/#History-start

更新

而且你應該使用的.htaccess處理根和重定向。您需要使用這樣的事情:

# html5 pushstate (history) support: 
<ifModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase /au/store/ 
    RewriteCond %{THE_REQUEST} ^.*/index.php 
    RewriteRule ^(.*)index.php$ /au/store/$1 [R,L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !^/index\.php 
    RewriteRule (.*) index.php 
</ifModule> 

而且它添加到你的頭標記

<base href="/au/store/" /> 

現在的先生,你得到一個完美的工作環境

+0

問題仍然存在。除非有路由具有根目錄,否則正確的路由不會在瀏覽器後退/前進時觸發。 – market 2012-05-28 01:14:10