【问题标题】:Why is `data("kendoGrid")` undefined?为什么 `data("kendoGrid")` 未定义?
【发布时间】:2013-06-08 22:26:14
【问题描述】:

我有两个 Kendo 网格定义,在局部视图中,除了局部视图模型和网格项模型外,它们完全相同。只有其中一个在代码行上给了我 JavaScript 控制台错误“无法读取未定义的属性 'dataSource'”:

$("#index-grid").data("kendoGrid").dataSource.bind("change", function (e) {...})

而另一个则没有。未定义的不是dataSource,而是$("#index-grid").data("kendoGrid")。然而,在另一个相同的网格中,我没有收到这个错误。提供给数据源的数据可能会使网格本身无效吗?网格定义如下所示:

@model TerminalIndexModel
@using Kendo.Mvc.UI
@using ParkPay.Helm.ViewModels
@(Html.Kendo().Grid<TerminalIndexItem>()
                .Name("index-grid")
                .Columns(columns =>
                            {
                                columns.Bound(p => p.Name);
                                columns.Template(@<text></text>).ClientTemplate("<input type='checkbox' #= IsActive ? checked='checked':'' # class='chkbx' />").Title("Active").Width(70);
                                columns.Bound(p => p.Remarks);
                                columns.Command(cmd => cmd.Destroy()).Width(80);
                            })
                .ToolBar(toolbar =>
                {
                    toolbar.Create();
                    toolbar.Save();
                })   
                .HtmlAttributes(new { style = "height: 480px;"})                                                        
                .Editable(editable => editable.Mode(GridEditMode.InCell))
                .Filterable()
                .Pageable()
                .Scrollable()
                .Sortable()
                .Resizable(resize => resize.Columns(true))
                .Reorderable(reorder => reorder.Columns(true))
                .DataSource(dataSource => dataSource
                                        .Ajax()
                                        .ServerOperation(false)
                                        .Batch(true)
                                        .PageSize(20)
                                        .Events(events => events.Error("kendoGridErrorHandler"))
                                        .Model(model => model.Id(p => p.Id))
                                        .Read(read => read.Action("Read", "Terminal"))
                                        .Update(update => update.Action("BatchUpdate", "Terminal"))
                                        .Create(create => create.Action("BatchCreate", "Terminal"))
                                        .Destroy(destroy => destroy.Action("BatchDelete", "Terminal"))
                            )
)

唯一的区别是 TerminalIndexItemLocationIndexItem' and andTerminalIndexModelversusLocationIndexModel, and of course the controller names in the CRUD definitions,TerminalversusLocation`。我无法找到两个网格之间的差异。

【问题讨论】:

  • 两个网格的名称不同吗?
  • 不,它们在不同的文件夹中具有相同的名称。
  • 两个网格的显示时间与问题行的执行时间有什么不同吗?意思是,对于有效的网格,是否有可能在行执行时已经初始化,而对于有问题的网格,它不是?另外,同名的网格不会同时在同一个页面上使用,对吗?
  • 不,它们总是分开使用。不过,您对订单的看法是可能的。我会调查一下,谢谢。如果可行,您可以将其作为答案。
  • @G_P 您是正确的,并且可以将您的评论作为答案。尽管对$("#index-grid").data("kendoGrid") 的一些调用包含在jQuery $( document ).ready() 函数中,但网格本身并没有准备好。我将它们移动到网格 DataBound 事件的处理程序中,一切都很好。

标签: telerik kendo-ui kendo-grid


【解决方案1】:

刚刚遇到同样的问题。

奇怪的是,即使在页面加载后启动了 javascript 代码(使用 $(function() {...})),似乎还不能从客户端访问网格。

解决方案:您需要在网格初始化(@Html.Kendo.Grid(...))之后放置您的 javascript 代码块。

【讨论】:

    【解决方案2】:

    两个网格的显示时间与问题行的执行时间有什么不同吗?意思是,是否有可能对于有效的网格,它在行执行时已经初始化,而对于有问题的网格,它不是?

    【讨论】:

      【解决方案3】:

      Kendo UI HtmlHelper 扩展的 Name() 用作其相应 HTML 元素的id HTML 属性。 id 属性在当前页面中必须是唯一的。如果您两次渲染相同的局部视图,两个网格最终将具有相同的id 属性。结果,只有第一个网格将被初始化。确保页面中的所有 HTML 元素都具有唯一 ID。这可以通过在 Name() 中附加一些后缀来完成:

      @(Html.Kendo().Grid<TerminalIndexItem>()
            .Name("index-grid" + ViewData["suffix"])
      

      可以在呈现局部视图的操作方法中设置此后缀。

      【讨论】:

      • 如果两个网格在同一个页面上,我肯定会给它们起不同的名字。
      • 收到此错误意味着 $().data("kendoGrid") 返回 undefined 因为网格由于某种原因未能初始化。检查 JS 错误或丢失的 JS 文件。
      • 它还没有初始化,但没有初始化失败。 $( document ).ready() 在 DOM 完成时触发,但不考虑 intpo 网格仍然有一个 AJAX“读取”等待数据绑定。
      • @ProfK:我也有同样的问题。你知道我该如何解决这个问题吗?
      • 对不起,@AjitGoel,我几年前就停止使用剑道了。它超出了我的预算。
      猜你喜欢
      • 2013-08-13
      • 2022-01-22
      • 2016-01-15
      • 2014-02-06
      • 1970-01-01
      • 2020-05-12
      • 2021-07-22
      • 2021-07-18
      • 2012-06-21
      相关资源
      最近更新 更多