我有一个模型,我正在尝试使用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”,但控制台为空,我收到错误(fetch函数返回错误回调)。这是为什么?我怎么能嘲笑后端?
EDIT 实际上@rjz帮助我做了我想做的事情,但我真的想知道是否可以通过骨干路由器捕获ajax调用。 我的直觉告诉我,不是因为ajax调用不能执行骨干客户端代码,因此路由器概念不相关。我是对的吗?..
答案 0 :(得分:0)
我认为您不想使用Backbone.Router
来捕获您的AJAX调用。如果您的目标是模拟项目的后端,则应使用测试框架来执行此操作。一种潦倒的方式是使用类似的东西:
或者如果你想做更像单元测试的事情,我会看Jasmine及其AJAX mocking library。
更新以回答您的问题:
简短的回答是否定的,Backbone.Router
无法拦截AJAX调用。
这是因为路由器通过侦听与URL有关的事件来工作。具体来说,路由器正在监听hashchange
或popstate
事件(取决于您使用的是pushState
)。由于AJAX调用不与URL交互,因此它们几乎完全绕过了这个系统。