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

Магистраль: сохранение всей коллекции на сервере, не относящемся к RESTful

Я просматривал несколько сообщений о том, как сохранить коллекцию Backbone с использованием сервера без RESTful, и я все еще немного запутался. Я создал коллекцию, где я переопределил метод toJSON, чтобы настроить мои данные для публикации в моем API ("/api/entity/735/request/personDelete" в настоящее время заменен на jsfiddles/echo/json). Поэтому я создал метод save, который использует Backbone.sync, на success Я выхожу из любого ответа, и объект пуст, не уверен, где вещи теряются или что я делаю неправильно; может ли кто-нибудь дать мне некоторое руководство? Просто хотел бы, чтобы этот пример работал, поэтому я могу использовать что-то вроде этого в будущем.

JS

var PersonCollection = Backbone.Collection.extend({
    model: PersonModel,

    url: function() {
        // Dummy JSFiddle endpoint
        // Example non-RESTful url "/api/entity/735/request/personDelete"
        return '/echo/json/';
    },

    /**
     *  Override toJSON to loop through collection models making
     *  custom objects containing specific attributes to be posted.
     */
    toJSON: function() {
        console.log(this.models);

        var plucked = this.models.map(function(model) {
            return _.pick( model.toJSON(), ["id","name", "teams"] )
        });

        console.log(plucked);
        return plucked;
    },

    save: function(options) {
      Backbone.sync('create', this, {
        success: function(data, textStatus, jqXHR) {
          console.log('Saved!', data);
        }
      });
    }
});

JSFiddle: http://jsfiddle.net/kyllle/f1h4cz7f/3/

4b9b3361

Ответ 1

Вам не нужно заставлять себя использовать sync, если это вам не поможет. sync позволяет экономить время в общих сценариях.

Как вы можете видеть в аннотированном sync кодексе, он в итоге просто вызывает jQuery.ajax и включает в себя логику, чтобы помочь с бэкэндами RESTful.

Также он вызывает некоторые события, которые вы могли бы или не могли слушать в других частях вашего приложения, например request (когда запрос был сделан) и sync (когда запрос был успешно завершен) или error (если запрос не выполнен)

Все это вы можете сделать из своего приложения, если переосмысление sync неинтересно.

Подготовьте свои данные, позвоните $.ajax, чтобы отправить данные на ваш сервер и, при желании, trigger базовые события, если вы собираетесь их слушать.

Ответ 2

Вы можете обернуть свою коллекцию внутри базовой модели.

var CollectionWrapper = Backbone.Model.extend({
    url: "/echo/json"
});

а затем вы можете использовать model.save() и/или Backbone.sync(), поскольку Backbone намеревается использовать его.

Смотрите этот ответ: "How" для сохранения целой коллекции в Backbone.js - Backbone.sync или jQuery.ajax?