1

我正在尝试使用 dojo.gridx 和 dojo.JsonRest 作为我的内存存储。我正在使用lazyEdit 功能,因为在提交之前需要完全填写一行的某些限制。

我有一个按钮和延迟对象定义如下

        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

我是否忘记添加标头以使 dojo 核心库拒绝该请求?我也可以在调试器中看到以下错误。

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

我还尝试让 dojo 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");
}
        )
4

1 回答 1

0

github 上的工匠发布了此回复。我没有尝试或测试过他的方法。

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

在gridx/core/model/extensions/Modify.js中,保存函数两个选项:

  1. 在第 252 行更改dl = new DeferredList(da);dl = new DeferredList(da, false, true); 现在可以调用错误回调
  2. 在第 260 行更改d.callback();d.callback(arguments);

现在在回调函数中,您可以使用参数来检测哪一行更新成功,哪一行更新错误。

参数由 DeferredList 产生,它是一个数组,每个项是一个包含 2 个子项的数组,第一个子项是一个布尔值,表示更新状态成功或错误

第二个子项是你更新成功时更新的对象,否则第二个子项是代表错误的ErrorCtor对象,你可以从中解决错误信息

于 2017-03-02T13:52:56.987 回答