2015-06-25 2 views
1

Я пытаюсь использовать dojo.gridx и dojo.JsonRest в качестве моего хранилища. Я использую функцию lazyEdit из-за некоторых ограничений строки, которые необходимо полностью заполнить перед отправкой.gridx lazyedit вызов grid.model.save() с Dojo.JsonRest разрешает ответ 500 put

У меня есть кнопка и отложенный объект, определенный следующим образом

 grid.startup(); 
    // var gridDeferred = new Deferred(function(reason){ 
     // do something when the Deferred is cancelled 
    // alert("canceled"); 
    // }); 


    var saveButton = new Button({ 
     label: "Save All Changes", 
     onClick: function(){ 
      gridDeferred = grid.model.save(); 
      // gridDeferred = grid.model.when(); 
      gridDeferred.then(function(value){ 
       alert("done"); 
      },function(err){ 
       alert("err"); 
      }, function(update){ 
       alert("update"); 
      }); 

     } 
    }, "Update").startup(); 

Я также пытался не-комментируя мой отложенный объект до события OnClick на кнопке, но до сих пор не повезло.

это заголовки ответа я получаю от сервера

HTTP/1.1 500 Internal Server Error 
Cache-Control: private, s-maxage=0 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: "removed by McFrank" 
X-AspNetMvc-Version: 5.2 
X-AspNet-Version: 4.0.30319 
Set-Cookie: "removed by McFrank" 
X-Powered-By: "removed by McFrank" 
Date: "removed by McFrank" 
Content-Length: 46 

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

PUT http://localhost:36348/admin/sales/1 500 (Internal Server Error)xhr 
@dojo.js:15dojo.xhr 
@ dojo.js:15_4.put 
@ JsonRest.js:33_60c.around.advice 
@ dojo.js:15_607.(anonymous function)._60c 
@ dojo.js:15declare._saveRow 
@ Modify.js:412(anonymous function) 
@ Modify.js:249_5b5.forEach 
@ dojo.js:15declare.save 
@ Modify.js:248declare._call 
@ _Extension.js:67declare._call 
@ _Extension.js:67declare._call 
@ _Extension.js:67declare._call 
@ _Extension.js:67declare._mixinAPI.api 
@ _Extension.js:76Button.onClick 
@ salesdata:540_1._onClick 
@ _ButtonMixin.js:16(anonymous function) 
@ dojo.js:15_1.__onClick 
@ _ButtonMixin.js:7(anonymous function) 
@ dojo.js:15 

Я также получаю эту ошибку, а

_5aa {message: "Unable to load /admin/sales/1 status: 500", response: Object, status: 500, responseText: "DealershipProductID:System.Web.Mvc.ModelError,", xhr: XMLHttpRequest}message: "Unable to load /admin/sales/1 status: 500"response: ObjectresponseText: "DealershipProductID:System.Web.Mvc.ModelError,"stack: (...)get stack:() { [native code] }set stack:() { [native code] }status: 500xhr: XMLHttpRequest__proto__: _5aa_4c3 @ dojo.js:15(anonymous function) @ dojo.js:15_1fe @ dojo.js:15_1fc @ dojo.js:15dojo.Deferred.reject.errback @ dojo.js:15_1fe @ dojo.js:15_1fc @ dojo.js:15dojo.Deferred.reject.errback @ dojo.js:15(anonymous function) @ dojo.js:15_4ec @ dojo.js:15_4e6 @ dojo.js:15_504.reject @ dojo.js:15_4f2 @ dojo.js:15_4ec @ dojo.js:15_4e6 @ dojo.js:15_504.reject @ dojo.js:15_4f2 @ dojo.js:15_4ec @ dojo.js:15_4e6 @ dojo.js:15_504.reject @ dojo.js:15_4f2 @ dojo.js:15_4ec @ dojo.js:15_4e6 @ dojo.js:15_504.reject @ dojo.js:15_4f2 @ dojo.js:15_4ec @ dojo.js:15_4e6 @ dojo.js:15_504.reject @ dojo.js:15_40b @ dojo.js:15_417 @ dojo.js:15 

Я также попытался получить запрос додзё XHR ошибки из которой он делает со следующей просьбой

xhr.put("http://localhost:36348/admin/sales/1", { 
     data:{"Id":1,"ProductID": null,"AccountExecName":"something","NetCommissionAmount":13625}, 
     handleAs:"json" 
}).then(function(data){ 
    alert("testDone") 
},function(err){ 
    alert("testerror"); 
}, function(evt){ 
    alert("testxhr"); 
} 
     ) 
+0

craftmans on github отправил этот ответ – McFrank

ответ

0

craftmans на github отправил этот ответ. Я не пробовал его методы.

https://github.com/oria/gridx/issues/218

В gridx/CORE/модели/расширения/Modify.js, функция сохранения два варианта:

  1. на линии № 252 изменения dl = new DeferredList(da); к dl = new DeferredList(da, false, true); Теперь ошибка обратного вызова может быть вызвана
  2. по строке # 260 изменение d.callback(); до d.callback(arguments);

Теперь в функции обратного вызова вы можете использовать аргументы, чтобы определить, какая строка обновлена ​​успешно и какая строка обновляется с ошибкой.

Аргументы получают DeferredList, который является массивом, каждый элемент представляет собой массив содержит 2 подэлементы, первый подэлемент является логическое значение, которое указывает обновление состояния успех или ошибку

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