Как использовать Backbone.js, но в режиме NO-RESTful?
Я теперь разработчик, и у меня есть проект, который подходит для использования BackboneJS, а серверная часть написана другими. Есть ли кто-нибудь, кто может сказать мне, как переопределять удаление, обновление, добавление и т.д. Не-RESTful способом? URL-адрес сервера может быть следующим:
- добавить:
www.domain.com/addBookById
- удалить:
www.domain.com/removeBookById
Спасибо большое!
Ответы
Ответ 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"