1

Я пытаюсь переопределить метод Backbone.sync для моей модели.Сгенерировать пользовательскую ошибку базового диапазона на model.save success

Сервер возвращает статус: 200 OK, а во всех случаях срабатывает успешная обратная связь.

Ответ сервера выглядит следующим образом

Статус: 200 OK

ответ: { StatusCode: '0'; // 0 успеха, 1,2,3 ошибки ... }

Я overided функции синхронизации бросить обратный вызов ошибки случаи прекрасно работает и бросить сообщение об ошибке CallBack

Хотя я не может пройти любые настраиваемые параметры для обратного вызова ошибки.

sync : function(method, model, options) { 

var self = this, config = {}; 
var newError = function(method, success, error) { 

    return function(response, textStatus, jqXHR) { 
     if (response.statusCode === '0' && _.isFunction(success)) { 
      success(response, textStatus, jqXHR); 
     } else if (_.isFunction(error)) { 

      switch (response.statusCode) { 
       case '1': 
        //response.statusCode: '2' 
        //response.statusMessage: 'Servers error 1!” 
        textStatus = 'Servers error 1!'; 
        break; 
       case '2': 

        //response.result: 'Server error 2' 
        //response.statusCode: '2' 
        textStatus = 'Servers error 1'; 
        break; 
      } 


     error(response, jqXHR, textStatus); //arguments fail maybe backbone overrides them before firing my error callback 

     } 
    }; 
}; 


config.success = newError(method, options.success, options.error); 

// add API call configuration to the `options` object 
options = _.extend(options, config); 
return Backbone.Model.prototype.sync.call(this, method, model, options); 
} 

// следующая ошибка обратного вызова вызывается, но сообщение не передается к нему

 model.save(data,{ 
     success : successCB, 
     error : function(args){ 
      alert('error'); //works 
      //args.textStatus or something similar passed from above sync logic 
     } 
    }) 

Я знаю, что что-то не так в этой линии. ошибка (ответ, jqXHR, textStatus);

Пожалуйста, дайте мне знать, как передать textStatus или другие параметры обратного вызова ошибки

ответ

0

Кажется, вопрос с порядком параметров в вашей функции ошибки. Подпись должна быть (jqXHR jqXHR, String textStatus, String errorThrown).

0

Следующая суть помогла common.js

Из приведенных выше цифр GIST линий 106 до 128 решить эту проблему, добавив следующие строки

 response.done(function(){ 
       if(response.responseJSON.statusCode && 
         response.responseJSON.statusCode === '0'){ 
        response.done(deferred.resolve); 
       } else { 
        deferred.rejectWith(response, arguments); 
       } 
     }); 

Спасибо за ответ, хотя изменение последовательности параметров не помогло