2012-11-11 180 views
1

我有一個模型,我試圖使用model.fetch();來獲取它。該模型的urlRoot設置爲我的應用程序的後端(「/ backend/item」),但現在我沒有後端環境。所以我決定嘲笑結果。我說我的路由器中的路由:骨幹模型提取 - 模擬後端

"backend/item/:id": "data_getItem" 

和功能:

data_getItem: function(id) { 
    console.log("data_getItem: "+ id); 
    return { 
    animals: [ 
     { 
     name: 'flying cat', 
     type: 'none' 
     } 
    ] 
    }; 
} 

運行應用程序時,我可以看到Ajax調用「http://127.0.0.1:8000/backend/item/1「,但控制檯是空的,我得到一個錯誤(取回函數返回到錯誤回調)。這是爲什麼?我怎樣才能嘲笑後端?

編輯 其實@rjz幫我我想要做的事情,但我真的想知道,如果一個Ajax調用可以通過骨幹路由器被逮住。 我的直覺告訴我,不是因爲ajax調用不能執行骨幹客戶端代碼,因此路由器概念不相關。我對嗎?

+0

您可能會閱讀http://stackoverflow.com/questions/5096549/how-to-override-backbone-sync – rjz

+0

@rjz:其實這幫了我,但我真的想知道,如果ajax調用可以訪問路線。 – Naor

回答

0

我不認爲你想用Backbone.Router來抓你的AJAX調用。如果您的目標是嘲笑項目的後端,那麼您應該使用測試框架來執行此操作。一個下來,髒的方法是使用類似:

,或者如果你想要做的事更像是單元測試我想看看Jasmine及其AJAX mocking library

更新來回答你的問題:

簡短的回答是否定的,一個Backbone.Router無法攔截AJAX調用。

這是因爲路由器通過監聽與URL有關的事件來工作。具體來說,路由器正在監聽hashchangepopstate事件(具體取決於您是否使用pushState)。由於AJAX調用不與URL進行交互,它們幾乎完全繞過了這個系統。

+0

謝謝,但我問的是骨幹路由器能否捕捉到ajax呼叫的可能性。我知道這不是最佳或不是這樣做的(我不打算使用它),但我只是想問假設ץ – Naor

+0

添加了更改來回答您的問題。簡短的回答:不,它不能。 –