繁体   English   中英

Kendo DataSource:如何取消更新请求

[英]Kendo DataSource: how cancel an update request

我有一个kendo UI网格和一个数据源。 当我调用Update方法时,我测试一个变量,如果条件为false,我不想发送请求。

目前我有:

 $scope.MySource = new kendo.data.DataSource({
  update: {
            url: function (lista) {
                if (testVariable== true) {           
                    testVariable= false;
                    return "api/Liste/PutLista/" + lista.Id
                }
                else {
                    $scope.MySource.cancelChanges();
                }
            },
            type: "PUT",
            dataType: "json",
            beforeSend: function (req) {
                var auth = $window.sessionStorage.token;
                req.setRequestHeader('Authorization', 'Bearer ' + auth);
            }

如果testVariable为false,我取消更新,但仍然看到ajax请求

http://localhost:61927/index.html with PUT method.

如果testVariable为false,我该如何阻止请求?

您可以在单击更新后立即拦截它。 在您的kendo网格中,使用save事件。 每次按更新时都会调用此事件。

save: function (e) {
    if (testVariable === false) {           
        e.preventDefault();         //prevent default action that kendo does
        $scope.MySource.cancelChanges();
    }
}

如果变量为false,则可以阻止默认操作并执行任何操作(例如取消更改)。 如果是,它将采取默认操作并保存您的行。

只需确保在此事件中可以访问变量testVariable (全局变量或您可以在此事件中设置的局部变量)。

url函数不是检查您是否确实要发出请求的地方。 我很确定一旦它取得了那么远就没有办法取消。

您可能希望尝试使用requestStart事件。 在某些情况下,从事件处理程序返回false将取消请求(但并非在所有情况下,这可能是一个kendo错误)。

否则,您只需覆盖DataSource实例上的sync()函数,执行检查,然后在需要时调用基本实现。

          $scope.MySource.sync = function () {
            if(customChecksPass) {
                kendo.data.DataSource.fn.sync.apply(this, arguments);
            }
          };

我也只是重新阅读你的问题,并意识到你正在使用网格。 网格小部件有一个可以绑定的保存事件 ,并从那里取消对DataSource的调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM