如何在骨干应用程序中指定各种URL?

时间:2011-08-08 18:39:04

标签: backbone.js

我需要一个主干模型来根据正在执行的操作类型来查找各种URL。如何确定URL函数中的操作以便我可以指定适当的URL?例如:

DELETE:/ myapipath / itemtype / id /
POST:/ myapipath / special-path /
GET:/ myapipath / special-path /?code = ABC

我知道如何区分POST和其他所有内容:this.isNew()

但是,如何在自定义model.url函数中区分DELETE和GET?

请不要建议我更改服务器端api。这不取决于我。

谢谢!

1 个答案:

答案 0 :(得分:55)

从概念上讲,Backbone模型的URL是资源的主要GET URL。要对某些操作使用不同的URL,请覆盖模型的同步功能。幸运的是,Backbone makes it easy to override

window.MyModel = Backbone.Model.extend({
  // ... other stuff ...

  url: '/myapipath/special-path/?code=ABC',

  methodUrl: {
    'create': '/myapipath/special-path/',
    'delete': '/myapipath/itemtype/id/'
  },

  sync: function(method, model, options) {
    if (model.methodUrl && model.methodUrl[method.toLowerCase()]) {
      options = options || {};
      options.url = model.methodUrl[method.toLowerCase()];
    }
    Backbone.sync(method, model, options);
  }
}

编辑:我又看了一下Backbone来源并注意到它合并了整个options参数来构建参数,而不是options.params,并相应地更新了我的示例