Ответ 1
Первым аргументом сохранения являются атрибуты сохранения на модели:
this.model.save( {att1 : "value"}, {success :handler1, error: handler2});
this.model.save({
success: function(model, response){
console.log('success');
},
error: function(){
console.log('error');
}
})
Модель правильно размещена на сервере, который обрабатывает сохранение, но обратный вызов успеха не запускается. Мне нужно отправить что-то обратно с сервера?
Первым аргументом сохранения являются атрибуты сохранения на модели:
this.model.save( {att1 : "value"}, {success :handler1, error: handler2});
По какой-то неизвестной причине ни один из вышеперечисленных методов не работал у меня. Апи только не пострадал в моем случае.
Но позже, при поиске по этому вопросу, я столкнулся с этой ссылкой, где кто-то пробовал null
вместо {}
в качестве первого параметра.
this.model.save(null, {
success: function (model, response) {
console.log("success");
},
error: function (model, response) {
console.log("error");
}
});
так, это сработало для меня. Надеюсь, это тоже поможет вам.
Сервер должен вернуть объект JSON. Если ответ не является объектом JSON, обратные вызовы не будут срабатывать.
Если для успеха ваш сервер не возвращает объект JSON, выполните сохранение с опцией dataType: "text" , например:
this.model.save([],{
dataType:"text",
success:function() {},
error:function() {}
});
С помощью этой опции он не будет ждать ответа JSON, но текст и, следовательно, обратный вызов будет запущен.
Вы можете использовать underscore lib следующим образом, поскольку базовая основа уже зависит от этого. Помните, что первый аргумент сохранения должен иметь либо атрибуты, либо вы можете просто пройти {}, если хотите сохранить сама модель.
this.model.save({}, _.bind(function(model, response){
//Do whatever you want e.g.
this.collection.add(model)
}, this))
поэтому я немного запутался - мне все равно нужно передать все атрибуты, чтобы я мог вызвать событие сохранения? что, если моя модель большая.. Я не хочу устанавливать каждое свойство вручную
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");
}
});
Ниже приведен код, который я использую для сохранения модели базовой модели.
this.model.save(model,{
success:function(model){
console.log("Saved Successfully");
},
error:function(model){
console.log("Error");
}
});
Приветствия
Рой М J
Для тех, кто хочет сохранить модель, не обновляя атрибуты, вы можете сделать следующее:
model.once("sync", function(model, response, options){
//
});
model.once("error", function(model, response, options){
//
});
model.save();
В функции инициализации привяжите метод синхронизации к методу, который вы определяете (onSaveSuccess)
initialize: function (options) {
this.model.on('sync', _.bind(this.onSaveSuccess, this));
},
onSaveSuccess: function() {
console.log('saved');
this.render();
},
Таким образом, всякий раз, когда вы запустите this.model.save(), он будет запускать функцию onSaveSuccess в качестве обратного вызова, если ваша синхронизация успешна.