任何人都可以解释一下为什么我第一次进入页面时对数据源读取方法的调用工作正常,但每次调用它以刷新视图时都无法执行?为了记录,我在Microsoft MVC环境中使用Kendo UI web(而不是MVC)。我可以在调试中清楚地看到read永远不会被调用,但如果我尝试介入,我会进入JQuery minified文件......这对我来说是不可能调试的。
以下是我们代码的示例:
var testDataSource = new kendo.data.DataSource({
transport: {
read: function (options) {
$.ajax({
url: "/Test/GetById",
data: { id: options.data[0] },
beforeSend: function() {
utils.hasPendingChanges = false;
myViewModel.set("isDirty", false);
},
success: function(result) {
utils.convertDates(result);
myViewModel.set("test", result);
kendo.bind($("#testForm"), myViewModel);
}
});
cache: false
},
parameterMap: function() {
return kendo.stringify(myViewModel.test);
}
},
change: function() {
var test= this.view()[0];
if (test!= null) {
myViewModel.set("test", test);
$("#testForm").show();
kendo.bind($("#testForm"), myViewModel);
} else {
$("#testForm").hide();
}
},
schema: {
data: function(data) {
if (data.notvalid) {
$(data.data).each(function() {
$("#errors").append('<li>' + this.toString() + '</li>');
});
} else {
myViewModel.set("readonly", true);
}
return data.data;
}
}
});
在如下的订阅事件中调用read方法:
$.subscribe("/Test/Detail", function (id) {
testDataSource.read([id]);
};
取消viewmodel:
cancel: function () {
$("#errors").html("");
myViewModel.set("readonly", true);
testDataSource.read([myViewModel.get("test.ID")]);
},
答案 0 :(得分:4)
当您将读取操作定义为函数时,您需要使用传递的事件参数的成功函数来表示成功。以下是documentation:
中的示例<script>
var dataSource = new kendo.data.DataSource({
transport: {
read: function(options) {
// make JSONP request to http://demos.kendoui.com/service/products
$.ajax({
url: "http://demos.kendoui.com/service/products",
dataType: "jsonp", // "jsonp" is required for cross-domain requests; use "json" for same-domain requests
success: function(result) {
// notify the data source that the request succeeded
options.success(result);
},
error: function(result) {
// notify the data source that the request failed
options.error(result);
}
});
}
}
});
</script>