Подтвердить что ты не робот

Как указать различные URL-адреса в базовом приложении?

Мне нужна одна из моих базовых моделей, чтобы использовать различные URL-адреса в зависимости от типа выполняемого действия. Как определить действие в функции URL, чтобы я мог указать соответствующий URL-адрес? Например:

УДАЛИТЬ:/myapipath/itemtype/id/
POST:/myapipath/special-path/
GET:/myapipath/special-path/? Code = ABC

Я знаю, как отличить POST от всего остального: this.isNew()

Но как я могу объяснить разницу между DELETE и GET в пользовательской функции model.url?

Не предлагайте мне изменить серверную api. Это не зависит от меня.

Спасибо!

4b9b3361

Ответ 1

Концептуально URL-адрес базовой модели является основным URL-адресом GET ресурса. Чтобы использовать другой 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);
  }
}

Изменить. Я еще раз посмотрел на источник Backbone и заметил, что он объединяет весь аргумент options для сборки параметров, а не options.params, и соответственно обновил мой пример.