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

Как использовать Backbone.js, но в режиме NO-RESTful?

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

  • добавить: www.domain.com/addBookById
  • удалить: www.domain.com/removeBookById

Спасибо большое!

4b9b3361

Ответ 1

Магистраль использует Backbone.sync для управления всей связью с сервером. Для sync есть две важные вещи; в первую очередь, это выглядит так:

Подпись метода Backbone.sync - sync(method, model, [options])

  • метод - метод CRUD ("create", "read", "update" или "delete")
  • модель - модель, которую нужно сохранить (или сбор, подлежащий чтению)
  • параметры - успешные и обратные вызовы ошибок и все другие параметры запроса jQuery

а во-вторых, вы можете переопределить sync для каждой модели и для каждой коллекции. Таким образом, вы можете добавить свою собственную реализацию sync к своей модели:

var M = Backbone.Model.extend({
    sync: function(method, model, options) {
        //...
    },
    //...
});

Если вы посмотрите method, вы можете решить, какой URL использовать, и выполняете ли вы запрос GET, POST,.... model сообщит вам, какие данные следует отправлять на сервер. Вы захотите объединить options в опции $.ajax, которые вы хотите использовать. Взгляните на стандартную реализацию Backbone.sync, она довольно проста и должна показать вам, что вам нужно сделать: просто замените обработку URL-адресов и отбросьте некоторые из функций, которые вам не нужны (например, emulateHTTP и emulateJSON).

Ответ 2

Лучший вариант в вашем случае - плагин, например Backbone.service. Это базовое обслуживание для невосприимчивого или полуповторного apis.

// define server targets / endpoints
var targets = {
  login: ["/login", "post"],
  signup: ["/signup", "post"],
  logout: ["/logout", "get"],
  search: "/search" // defaults to get
  resetPassword: ["/resetpassword", "post"],
  updateSettings: ["/updateSettings", "post"]
};

// standalone service
var service = new Backbone.Service({ url: "http://localhost:5000", targets: targets });

// extend backbone model
var User = Backbone.Model.extend(service);

Вы можете использовать его следующим образом:

var user = new User();
user.login({ username: 'bob', password: 'secret' });

Ответ 3

Здесь приведен пример модифицированного вызова Backbone.js ajax:

var Forecast = Backbone.Model.extend({
  url: function() {
    return "http://api.wunderground.com/api/7eaec3b21b154448/conditions/q/" + this.get( "zip" ) + ".json";
  },
  parse : function( data, xhr ) {
    var observation = data.current_observation;
    return {
      id: observation.display_location.zip,
      url: observation.icon_url,
      state: observation.display_location.state_name,
      zip: observation.display_location.zip,
      city: observation.display_location.city,
      temperature: observation.temp_f
    };
  }
});

От: Вступление Илии в "Backbone.JS"