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'
      }
    ]
  };
}

运行应用程序时,我可以看到对“http://127.0.0.1:8000/backend/item/1”的 ajax 调用,但控制台为空,并且出现错误(获取函数将我返回到错误回调)。这是为什么?如何模拟后端?

编辑实际上@rjz 帮助我完成了我想做的事情,但我真的很想知道骨干路由器是否可以捕获 ajax 调用。我的直觉告诉我,不是因为 ajax 调用无法执行骨干客户端代码,因此路由器概念不相关。我对吗?..

4

1 回答 1

0

我认为您不想使用 aBackbone.Router来捕获 AJAX 调用。如果您的目标是模拟项目的后端,您应该使用测试框架来执行此操作。一个肮脏的方法是使用类似的东西:

或者如果你想做一些更像单元测试的事情,我会看看Jasmine和它的AJAX 模拟库

更新以回答您的问题:

简短的回答是否定的,Backbone.Router不能拦截 AJAX 调用。

这是因为路由器通过侦听与 URL 相关的事件来工作。具体来说,路由器正在侦听hashchangepopstate事件(取决于您是否使用pushState)。由于 AJAX 调用不与 URL 交互,它们几乎完全绕过了这个系统。

于 2012-11-12T00:49:52.090 回答