当数据从 kendo 网格中的 ajax 呈现时如何显示微调器
How to display spinner when data are rendered from ajax in kendo grid
我的应用程序中有一些用于查询的搜索过滤器。我想从过滤器中将 json 结果渲染到 kendo 网格中。出于这个原因,我不使用网格的默认 DataSource.Read(),而是使用 Ajax 请求,我将结果绑定到网格,如下所示:
Kendo 网格:
@(Html.Kendo().Grid<List<SearchSpecialtiesResult>>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(c => c.Id).Hidden();
columns.Bound(c => c.Code).Width(100);
// Some other columns
})
//Some events and filtering options
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Model(model =>
{
model.Id(p => p.Id);
// other model values
})
)
)
设置数据源 Ajax 成功
var datasource = new kendo.data.DataSource({ data: resultData });
$("#grid").data("kendoGrid").setDataSource(datasource);
绑定发生正确,但是在我使用 DataSource.Read() 的其他地方,网格显示加载效果,我找不到如何重现我的页面和我在这个地方使用了我们在 Ajax 请求上使用的一些其他加载效果。有什么方法可以重现我的情况吗?
您正在寻找 kendo.ui.progress
。单击 here 查看 Telerik 的文档。
在 运行 调用 ajax 之前添加以下内容以显示加载效果:
kendo.ui.progress($("#gridName"), true);
成功或失败后添加以下内容以删除加载效果:
kendo.ui.progress($("#gridName"), false);
我的申请中也遇到过这样的情况。我处理它们的方式也是kendo.ui.progress($("#gridDame"), true)
。为了完成答案,我将 post 我处理它们的方式以及我现在使用网格的 DataSource.Read()
处理它们的方式,方法是将过滤器输入值作为附加数据传递给我读取请求。
第一种方式:
我有一个通用的 Ajax 调用我所有的 gridRequests
function getGridData(uri, payload, gridName) {
return $.ajax({
url: uri,
type: "POST",
contentType: "application/json",
data: payload,
beforeSend: function () {
window.kendo.ui.progress($("#"+ gridName), true);
}
}).done(function (result) {
return result;
}).always(function () {
window.kendo.ui.progress($("#" + gridName), false);
});
}
我使用搜索表单的参数在单击按钮时调用了它
$("#searchFormBtn").bind("click", function (e) {
e.preventDefault();
// ... Get the filter input values and strignify them as json ...
return getGridData(url, filterInputValuesStrignifiedAsJson, "grid")
.done(function (result) {
if (result.success) {
var datasource = new kendo.data.DataSource({ data: result.data });
$("#grid").data("kendoGrid").setDataSource(datasource);
} else {
//Handle error
}
});
});
第二种方式:
我这样设置 Datasource.Read()
:
.Read(read => read.Action("ActionName", "ControllerName").Data("getFilterInputValues"))
并且始终Autobind(false)
以免在第一次加载时阅读
在函数 getFilterInputValues
中,我的搜索表单值如下:
function searchModelData() {
return {
DateFrom: $("#DateFrom").data("kendoDatePicker").value(),
DateTo: $("#DateTo").data("kendoDatePicker").value(),
Forever: document.getElementById("datesForever").checked === true ? true : false,
SearchCommunicationType: { Id: $("#SearchCommunicationType_Id").val() },
SearchBranch: { Id: $("#SearchBranch_Id").val() },
CompletedById: { Id: $("#CompletedById_Id").val() },
SearchOperationType: { Id: $("#SearchOperationType_Id").val() },
AcademicPeriodSearch: { Id: $("#AcademicPeriodSearch_Id").val() },
AcademicYearSearch: $("#AcademicYearSearch").val(),
Name: $("#Name").val(),
ContactValue: $("#ContactValue").val(),
AddressValue: $("#AddressValue").val()
};
}
最后,我在单击按钮时触发了网格的 DataSource.Read()
$("#searchFormBtn").bind("click", function () {
var grid = $('#grid').data("kendoGrid");
if (grid.dataSource.page() !== 1) {
grid.dataSource.page(1);
}
grid.dataSource.read();
});
使用 Datasource.Read()
显然可以正常工作,并且您在问题中提到的旋转效果。
您可以手动完成
<div id="UrGrid"></div>
<div class="chart-loading"></div>
活动中:
var loading = $(".chart-loading", e.sender.element.parent());
kendo.ui.progress(loading, true);
...work with data...
kendo.ui.progress(loading, false);
我的应用程序中有一些用于查询的搜索过滤器。我想从过滤器中将 json 结果渲染到 kendo 网格中。出于这个原因,我不使用网格的默认 DataSource.Read(),而是使用 Ajax 请求,我将结果绑定到网格,如下所示:
Kendo 网格:
@(Html.Kendo().Grid<List<SearchSpecialtiesResult>>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(c => c.Id).Hidden();
columns.Bound(c => c.Code).Width(100);
// Some other columns
})
//Some events and filtering options
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Model(model =>
{
model.Id(p => p.Id);
// other model values
})
)
)
设置数据源 Ajax 成功
var datasource = new kendo.data.DataSource({ data: resultData });
$("#grid").data("kendoGrid").setDataSource(datasource);
绑定发生正确,但是在我使用 DataSource.Read() 的其他地方,网格显示加载效果,我找不到如何重现我的页面和我在这个地方使用了我们在 Ajax 请求上使用的一些其他加载效果。有什么方法可以重现我的情况吗?
您正在寻找 kendo.ui.progress
。单击 here 查看 Telerik 的文档。
在 运行 调用 ajax 之前添加以下内容以显示加载效果:
kendo.ui.progress($("#gridName"), true);
成功或失败后添加以下内容以删除加载效果:
kendo.ui.progress($("#gridName"), false);
我的申请中也遇到过这样的情况。我处理它们的方式也是kendo.ui.progress($("#gridDame"), true)
。为了完成答案,我将 post 我处理它们的方式以及我现在使用网格的 DataSource.Read()
处理它们的方式,方法是将过滤器输入值作为附加数据传递给我读取请求。
第一种方式:
我有一个通用的 Ajax 调用我所有的 gridRequests
function getGridData(uri, payload, gridName) {
return $.ajax({
url: uri,
type: "POST",
contentType: "application/json",
data: payload,
beforeSend: function () {
window.kendo.ui.progress($("#"+ gridName), true);
}
}).done(function (result) {
return result;
}).always(function () {
window.kendo.ui.progress($("#" + gridName), false);
});
}
我使用搜索表单的参数在单击按钮时调用了它
$("#searchFormBtn").bind("click", function (e) {
e.preventDefault();
// ... Get the filter input values and strignify them as json ...
return getGridData(url, filterInputValuesStrignifiedAsJson, "grid")
.done(function (result) {
if (result.success) {
var datasource = new kendo.data.DataSource({ data: result.data });
$("#grid").data("kendoGrid").setDataSource(datasource);
} else {
//Handle error
}
});
});
第二种方式:
我这样设置 Datasource.Read()
:
.Read(read => read.Action("ActionName", "ControllerName").Data("getFilterInputValues"))
并且始终Autobind(false)
以免在第一次加载时阅读
在函数 getFilterInputValues
中,我的搜索表单值如下:
function searchModelData() {
return {
DateFrom: $("#DateFrom").data("kendoDatePicker").value(),
DateTo: $("#DateTo").data("kendoDatePicker").value(),
Forever: document.getElementById("datesForever").checked === true ? true : false,
SearchCommunicationType: { Id: $("#SearchCommunicationType_Id").val() },
SearchBranch: { Id: $("#SearchBranch_Id").val() },
CompletedById: { Id: $("#CompletedById_Id").val() },
SearchOperationType: { Id: $("#SearchOperationType_Id").val() },
AcademicPeriodSearch: { Id: $("#AcademicPeriodSearch_Id").val() },
AcademicYearSearch: $("#AcademicYearSearch").val(),
Name: $("#Name").val(),
ContactValue: $("#ContactValue").val(),
AddressValue: $("#AddressValue").val()
};
}
最后,我在单击按钮时触发了网格的 DataSource.Read()
$("#searchFormBtn").bind("click", function () {
var grid = $('#grid').data("kendoGrid");
if (grid.dataSource.page() !== 1) {
grid.dataSource.page(1);
}
grid.dataSource.read();
});
使用 Datasource.Read()
显然可以正常工作,并且您在问题中提到的旋转效果。
您可以手动完成
<div id="UrGrid"></div>
<div class="chart-loading"></div>
活动中:
var loading = $(".chart-loading", e.sender.element.parent());
kendo.ui.progress(loading, true);
...work with data...
kendo.ui.progress(loading, false);