Источник данных Kendo: как отменить запрос на обновление

у меня есть сетка 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 ложно?

2 ответов


Вы можете перехватить его сразу после нажатия на обновление. В сетке кендо используйте событие save. Это событие вызывается каждый раз при нажатии кнопки update.

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

если переменная false, то вы предотвращаете действие по умолчанию и делаете все, что хотите (например, отменяете изменения). Если это правда, он просто примет действие по умолчанию и сохранит вашу строку.

просто убедитесь, что переменная testVariable доступно в этом событии (глобальная переменная или локальная переменная, которую вы можно установить в этом случае).


на url функция не является местом для проверки, если вы действительно хотите сделать запрос. Я уверен, что нет никакого способа отменить, как только он сделал это так далеко.

вы можете попробовать использовать requestStart событие. В некоторых случаях возвращение false из обработчика событий отменит запрос (но не во всех случаях, что может быть ошибкой кендо).

в противном случае, вы можете просто заменить sync() функция на экземпляре источника данных, выполните проверки, затем при необходимости вызовите базовую реализацию.

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

Я тоже только что перечитал ваш вопрос и понял, что вы используете сетку. Виджет сетки имеет сохранить событие, к которому вы можете привязаться, и отменить вызов источника данных оттуда.