无法访问 Kendo 网格数据源中的数据数组
Unable to access data array in Kendo grid datasource
背景故事:
我正在尝试对我正在使用他们的 Mvc 包装器制作的 kendo 网格进行一些自定义验证。我想根据当前数据检查用户的输入,以确保用户没有重复输入。为此,我需要访问网格的数据数组。
我的代码:
@using Kendo.Mvc.UI
@model ViewModel.SecurityManagementViewModel
<div class="container containerOuterBorder">
<div class="containerBorder">
<div class="pageTitle">Users</div>
</div>
@(Html.Kendo().Grid<User>()
.Name("Users")
.Columns(columns =>
{
columns.Bound(c => c.LastName).Title("Last Name");
columns.Bound(c => c.FirstName).Title("First Name");
columns.Bound(c => c.WindowsId).Title("Windows Id");
columns.Bound(c => c.Email).Title("Email");
columns.Bound(c => c.RoleId).Title("Access Role")
.EditorTemplateName("SecurityManagementEditor").ClientTemplate("#:RoleName#");
columns.Command(command =>
{
command.Edit();
command.Destroy();
});
})
.ToolBar(toolbar =>
{
toolbar.Create().Text("Add New User");
toolbar.Custom().Text("Manage Roles").Url("/Admin/SecurityRoles");
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Sortable()
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Model(model => model.Id(u => u.UserId))
.Create(update => update.Action("SecurityManagement_Create", "Admin"))
.Read(read => read.Action("SecurityManagement_Read", "Admin"))
.Update(update => update.Action("SecurityManagement_Update", "Admin"))
.Destroy(update => update.Action("SecurityManagement_Destroy", "Admin"))
)
)
</div>
<script>
$(document).ready(function () {
//logging the grid
console.log($("#Users").data().kendoGrid);
//logging the data, by various means
console.log($("#Users").data().kendoGrid.dataSource.view());
console.log($("#Users").data().kendoGrid.dataSource._data);
console.log($("#Users").data("kendoGrid")._data);
//logging the columns (successful)
console.log($("#WFMUsers").data("kendoGrid").columns);
});
</script>
问题:
当我尝试从网格的数据源访问数据数组时,响应总是以某种方式为空。更令人沮丧的是,记录网格本身,我可以查看 已经加载的数据。我还可以轻松访问其他属性,例如列。
日志:
网格对象。显然,_data 数组已填充
网格中包含的对象。我能看到他们!
最后 4 行的结果。前 3 个,试图访问 _data,结果都是空的。最后,访问列,返回没有问题。
我试过:
- 多种表达代码的方式。
- 正在重启Visual Studio
- 运行 在 FireFox、Chrome 和 IE
- 正在重启我的电脑
记录条目的脚本在 $(document).ready() 函数中执行。
这意味着,此时 DOM 已准备就绪,但网格数据是通过 Ajax 加载的,因此此时网格尚未填充。但是,这些列是可用的,因为它们是网格配置的一部分。
如果您在浏览器控制台中键入 console.log($("#Users").data().kendoGrid.dataSource.view());网格已填满,您应该会看到相应的条目。
要确保数据加载,可以使用网格的dataBound事件。加载数据时会触发此事件。 (参见 Kendo Documentation)
背景故事:
我正在尝试对我正在使用他们的 Mvc 包装器制作的 kendo 网格进行一些自定义验证。我想根据当前数据检查用户的输入,以确保用户没有重复输入。为此,我需要访问网格的数据数组。
我的代码:
@using Kendo.Mvc.UI
@model ViewModel.SecurityManagementViewModel
<div class="container containerOuterBorder">
<div class="containerBorder">
<div class="pageTitle">Users</div>
</div>
@(Html.Kendo().Grid<User>()
.Name("Users")
.Columns(columns =>
{
columns.Bound(c => c.LastName).Title("Last Name");
columns.Bound(c => c.FirstName).Title("First Name");
columns.Bound(c => c.WindowsId).Title("Windows Id");
columns.Bound(c => c.Email).Title("Email");
columns.Bound(c => c.RoleId).Title("Access Role")
.EditorTemplateName("SecurityManagementEditor").ClientTemplate("#:RoleName#");
columns.Command(command =>
{
command.Edit();
command.Destroy();
});
})
.ToolBar(toolbar =>
{
toolbar.Create().Text("Add New User");
toolbar.Custom().Text("Manage Roles").Url("/Admin/SecurityRoles");
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Sortable()
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Model(model => model.Id(u => u.UserId))
.Create(update => update.Action("SecurityManagement_Create", "Admin"))
.Read(read => read.Action("SecurityManagement_Read", "Admin"))
.Update(update => update.Action("SecurityManagement_Update", "Admin"))
.Destroy(update => update.Action("SecurityManagement_Destroy", "Admin"))
)
)
</div>
<script>
$(document).ready(function () {
//logging the grid
console.log($("#Users").data().kendoGrid);
//logging the data, by various means
console.log($("#Users").data().kendoGrid.dataSource.view());
console.log($("#Users").data().kendoGrid.dataSource._data);
console.log($("#Users").data("kendoGrid")._data);
//logging the columns (successful)
console.log($("#WFMUsers").data("kendoGrid").columns);
});
</script>
问题:
当我尝试从网格的数据源访问数据数组时,响应总是以某种方式为空。更令人沮丧的是,记录网格本身,我可以查看 已经加载的数据。我还可以轻松访问其他属性,例如列。
日志:
网格对象。显然,_data 数组已填充
网格中包含的对象。我能看到他们!
最后 4 行的结果。前 3 个,试图访问 _data,结果都是空的。最后,访问列,返回没有问题。
我试过:
- 多种表达代码的方式。
- 正在重启Visual Studio
- 运行 在 FireFox、Chrome 和 IE
- 正在重启我的电脑
记录条目的脚本在 $(document).ready() 函数中执行。 这意味着,此时 DOM 已准备就绪,但网格数据是通过 Ajax 加载的,因此此时网格尚未填充。但是,这些列是可用的,因为它们是网格配置的一部分。
如果您在浏览器控制台中键入 console.log($("#Users").data().kendoGrid.dataSource.view());网格已填满,您应该会看到相应的条目。
要确保数据加载,可以使用网格的dataBound事件。加载数据时会触发此事件。 (参见 Kendo Documentation)