Как активировать обратный вызов успеха на model.save()?

this.model.save({
  success: function(model, response){
    console.log('success');
  },
  error: function(){
    console.log('error');
  }
})

Модель правильно размещена на сервере, который обрабатывает сохранение, но обратный вызов успеха не запускается. Мне нужно отправить что-то обратно с сервера?

Ответ 1

Первым аргументом сохранения являются атрибуты сохранения на модели:

this.model.save( {att1 : "value"}, {success :handler1, error: handler2});

Ответ 2

По какой-то неизвестной причине ни один из вышеперечисленных методов не работал у меня. Апи только не пострадал в моем случае.

Но позже, при поиске по этому вопросу, я столкнулся с этой ссылкой, где кто-то пробовал null вместо {} в качестве первого параметра.

this.model.save(null, {
    success: function (model, response) {
        console.log("success");
    },
    error: function (model, response) {
        console.log("error");
    }
});

так, это сработало для меня. Надеюсь, это тоже поможет вам.

Ответ 3

Сервер должен вернуть объект JSON. Если ответ не является объектом JSON, обратные вызовы не будут срабатывать.

Если для успеха ваш сервер не возвращает объект JSON, выполните сохранение с опцией dataType: "text" , например:

this.model.save([],{
 dataType:"text",
 success:function() {},
 error:function() {}
});

С помощью этой опции он не будет ждать ответа JSON, но текст и, следовательно, обратный вызов будет запущен.

Ответ 4

Вы можете использовать underscore lib следующим образом, поскольку базовая основа уже зависит от этого. Помните, что первый аргумент сохранения должен иметь либо атрибуты, либо вы можете просто пройти {}, если хотите сохранить сама модель.

this.model.save({}, _.bind(function(model, response){
  //Do whatever you want e.g.
  this.collection.add(model)
}, this))

Ответ 5

поэтому я немного запутался - мне все равно нужно передать все атрибуты, чтобы я мог вызвать событие сохранения? что, если моя модель большая.. Я не хочу устанавливать каждое свойство вручную

im call model.save и пытается сделать следующее:

this.model.save(
    {
        success: function (model, response) {
            console.log('model saved');
        }
    });

ok просто для ответа на мой вопрос, если кто-нибудь найдет этот пост, я сделал следующее, которое работает:

this.model.save({ id: this.model.get('id') },
    {
        success: function (model, response) {
            console.log("success");
        },
        error: function (model, response) {
            console.log("error");
        }
    });

EDIT: Я почему-то не могу ответить на это, но я могу редактировать

но вам не нужно устанавливать id: this.model.get('id') вы можете просто передать пустой объект, потому что пустой атрибут просто не расширяет атрибуты, ничего не делает:

this.model.save({}, {
    success: function (model, response) {
        console.log("success");
    },
    error: function (model, response) {
        console.log("error");
    }
});

Ответ 6

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

this.model.save(model,{
   success:function(model){
       console.log("Saved Successfully");
   },
   error:function(model){
       console.log("Error");
   }
});

Приветствия

Рой М J

Ответ 7

Для тех, кто хочет сохранить модель, не обновляя атрибуты, вы можете сделать следующее:

model.once("sync", function(model, response, options){
    //
});
model.once("error", function(model, response, options){
    //
});
model.save();

Ответ 8

В функции инициализации привяжите метод синхронизации к методу, который вы определяете (onSaveSuccess)

            initialize: function (options) {
                    this.model.on('sync', _.bind(this.onSaveSuccess, this));
},
            onSaveSuccess: function() {
                console.log('saved');
                this.render();
            },

Таким образом, всякий раз, когда вы запустите this.model.save(), он будет запускать функцию onSaveSuccess в качестве обратного вызова, если ваша синхронизация успешна.