2012-06-26 76 views
4

Backbone.js的提供navigate(fragment, [options])方法,其Backbone.router對象,它不(每文檔)以下:骨幹路由器不尊重觸發= false選項

每當你在你的應用達到一個點您希望將其另存爲網址,請致電navigate以更新網址。如果您還想調用路由功能,請將trigger選項設置爲true。要更新網址而不在瀏覽器歷史記錄中創建條目,請將replace選項設置爲true

因此,簡單地調用appRouter.navigate('page');的網址可能會改變www.myapp.com/page而不觸發相應的路由。但是,我發現我的路由器重定向到了URL ,並且也觸發了頁面路由,儘管默認情況下是trigger=false

因此,下面的代碼:

> home route 
> page route 

當預期的控制檯輸出應該只是::

$(function(){ 
var AppRouter = Backbone.Router.extend({ 

    routes: { 
     '': 'home', 
     'page': 'page', 
    }, 

    home: function() { 
     window.app.navigate('page', {replace: true});   
     console.log('home route');  
    }, 

    page: function() { 
     console.log('page route'); 
    }, 

}); 

window.app = new AppRouter(); 
Backbone.history.start({pushState: true}); 
}); 

導航到www.myapp.com時產生以下控制檯輸出

> home route 

該方法似乎違反默認trigger選項。這是實施中的錯誤,還是我誤解了某些東西?

+0

它與'trigger:false'設置是否正常工作? – jakee

+0

@jakee:不,window.app.navigate('page',{trigger:false,replace:true});'仍然產生相同的行爲。正如'window.app.navigate('page');'。 – Matm

+1

從'Backbone.history.start'中取出'pushState:true'並用原始導航調用進行嘗試。我搜索了一下,'pushState:true'和'navigate'之間可能存在連接,無法正常工作。 – jakee

回答

0

Backbone.history.start中取下pushState: true,並嘗試與原始navigate調用。

我搜索了一個解決方案,但我得到的是模糊的評論關於歷史API的pushState: true導致骨幹路由器的導航功能不能正常工作。對於我的谷歌搜索this文章的例子是關於我能找到的問題的最佳資源。