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

gcd*_*dev 26 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.这不取决于我.

谢谢!

Ben*_*kin 55

从概念上讲,Backbone模型的URL是资源的主要GET URL.要对某些操作使用不同的URL,请覆盖模型的同步功能.幸运的是,Backbone可以轻松覆盖:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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