我有一个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,我取消更新,但仍然会看到
http://localhost:61927/index.html with PUT method.
如果testVariable
为假,我如何阻止请求?
答案 0 :(得分:4)
您可以在点击更新后立即拦截它。在您的kendo网格中,使用save事件。每次按更新时都会调用此事件。
save: function (e) {
if (testVariable === false) {
e.preventDefault(); //prevent default action that kendo does
$scope.MySource.cancelChanges();
}
}
如果变量为false,则可以阻止默认操作并执行任何操作(例如取消更改)。如果是,它将采取默认操作并保存您的行。
只需确保在此事件中可以访问变量testVariable
(全局变量或您可以在此事件中设置的局部变量)。
答案 1 :(得分:2)
url
函数不是检查您是否确实要发出请求的地方。我很确定一旦它取得这么远就没有办法取消。
您可能希望尝试使用requestStart事件。在某些情况下,从事件处理程序返回false
将取消请求(但不是在所有情况下,这可能是一个kendo错误)。
否则,您只需覆盖DataSource实例上的sync()
函数,进行检查,然后根据需要调用基本实现。
$scope.MySource.sync = function () {
if(customChecksPass) {
kendo.data.DataSource.fn.sync.apply(this, arguments);
}
};
我也只是重新阅读你的问题并意识到你正在使用网格。网格小部件有一个save event,您可以绑定它,并从那里取消对DataSource的调用。