2012-07-02 58 views
1

我對骨幹js來說很新,而且我有一些問題讓我的app的pushstate功能工作。這裏是一個如我的路線:Backbone.js Pushstate:true不返回回調函數

var TodoRouter = new (Backbone.Router.extend({ 
    routes: { 
     "": "index", 
     "item/add": "AddTodoItem", 
     "list/add": "AddTodoList" 
    }, 
    AddTodoItem: function() { 
     //e.preventDefault(); 
     alert("add new item"); 
    }, 
    AddTodoList: function(e) { 
     //e.preventDefault(); 
     alert("add new list"); 
    }, 
    Start: function(){ 
      //note: my directory structure is localhost/playground/todo/ 
     Backbone.history.start({pushState: true, root: "/playground/todo/"}); 
    }, 
    initalize: function(){ 

    }, 
    index: function(){ 
     var todoListView = new TodoListView({ collection: TodoItemCollection }); 
    } 
})); 

這裏是我打電話給我的路線:

$(function() { 
    TodoRouter.Start(); 
}); 

而最後這是我如何調用鏈接:

<a href="#list/add" id="newList">New List</a> 

的問題我遇到的情況是,當我打電話給該鏈接時,頁面保持不變,沒有警報,瀏覽器顯示:

http://localhost/playground/todo/#list/add 

現在這裏是有趣的部分,如果我刷新頁面,網址變成:

http://localhost/playground/todo/list/add 

,我得到警報。所以我有一種感覺,我錯過了某個關鍵點。任何幫助將不勝感激!

回答

1

你有pushState: true,這就是爲什麼它傾向於斜線/,而不是哈希#

要麼更改或刪除哈希

0

您正在嘗試使用骨幹路由和HTML5 pushState的。

隨着骨幹文件說:

「如果你有/路由文件/ 100,Web服務器必須能夠 服務於該頁面,如果瀏覽器訪問該網址直接。」

所以如果你想通過uri觸發一些功能(localhost/webapp/#about),你只需要使用骨幹路由。 如果你想使用Backbone Routes和pushState,你需要一個後端來回答你對可讀url(localhost/webapp/about)的請求,並且需要使用backbone.navigate方法來避免瀏覽器將<a href="#someRoute">理解爲html錨點。

here你可以看到一個完整的例子

你不能觸發你的路線,因爲當pushState:truehref="#route"具有相同的行爲作爲一個HTML錨。