Источник данных 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);
}
};
Я тоже только что перечитал ваш вопрос и понял, что вы используете сетку. Виджет сетки имеет сохранить событие, к которому вы можете привязаться, и отменить вызов источника данных оттуда.