2013-06-12 3 views
3

У меня есть два определения сетки Кендо, в частичных представлениях, которые точно такие же, что и для модели частичного представления и модели элемента сетки. Только один из потом дает мне ошибку консоли JavaScript «Не удается прочитать свойство„DataSource“неопределенных» на строке кода:Почему `data (« kendoGrid »)` undefined?

$("#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")) 
          ) 
) 

с той лишь разницей, TerminalIndexItem против LocationIndexItem' and and TerminalIndexModel versus LocationIndexModel , and of course the controller names in the CRUD definitions, Терминал versus Location`. Я нахожусь в своем остроумие, находя разницу между двумя сетками.

+0

do обе сетки имеют другое имя каждый? – pollirrata

+0

Нет, они имеют одно и то же имя в разных папках. – ProfK

+0

Есть ли разница в том, когда две сетки отображаются в зависимости от того, когда выполняется проблемная линия? Смысл, возможно ли, что для сетки, которая работает, она уже инициализируется, когда выполняется строка, а для проблемной сетки это не так? Кроме того, сетки с тем же именем не используются на одной странице одновременно, правильно? –

ответ

2

Есть ли разница в том, когда две сетки отображаются в зависимости от того, когда выполняется проблемная линия? Смысл, возможно ли, что для сетки, которая работает, она уже инициализируется, когда выполняется строка, а для проблемной сетки это не так?

0

Имя() расширения Kendo UI HtmlHelper Extension используется как атрибут HTML id соответствующего HTML-элемента. Атрибут id должен быть уникальным на текущей странице. Если вы сделаете один и тот же частичный вид дважды, обе сетки получат тот же атрибут id. В результате будет инициализирована только первая сетка. Убедитесь, что все элементы HTML на вашей странице имеют уникальный идентификатор. Это может быть сделано путем добавления какой-то суффикс имени():

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

Этот суффикс может быть установлен в вашем методе действия, которое оказывает на частичный вид.

+0

Если бы обе сетки были на одной странице, я определенно дал бы им разные имена. – ProfK

+0

Получение этой ошибки означает, что данные $(). Data ("kendoGrid") возвращаются undefined, потому что по какой-то причине сетка не инициализировалась. Проверьте наличие ошибок JS или отсутствующих файлов JS. –

+1

Он еще не инициализировался, но не смог инициализировать.'$ (document) .ready()' срабатывает, когда DOM завершен, но не принимает учетную запись intpo, сетка все еще имеет AJAX 'read', ожидающий привязки данных. – ProfK

0

Просто у той же проблемы.

Странно, хотя javascript-код запускается после загрузки страницы (используя $ (function() {...})), похоже, что сетка еще не доступна у клиента.

Решение: Вам необходимо разместить блок кода javascript после инициализации сетки (@ Html.Kendo.Grid (...)).

Смежные вопросы