2012-11-11 140 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

添加了更改来回答您的问题。简短的回答:不,它不能。 –