2016-09-17 2 views
0

У меня есть сетка пользовательского интерфейса Kendo и дочерняя сетка, вложенная в родительский. Когда я делаю всплывающее редактирование на дочерней сетке и выпадающий список выбирает в качестве одного из своих полей, я хочу получить доступ из этого раскрывающегося списка экземпляра дочерней сетки, редактируемой в данный момент.Экземпляр сетки доступа к пользовательскому интерфейсу Kendo UI из виджета в его редакторе

По-видимому, не представляется возможным предоставить идентификатор дочерним сеткам (поскольку все дочерние решетки тогда будут иметь одинаковый идентификатор), например, Я не могу сделать самое простое:

var childGrid = $("#myChildGridCurrentlyEdited").data("kendoGrid"); 

То, что я хочу, чтобы это наблюдаемый массив из редактируемой детской сетки, чтобы проверить, какие элементы у него есть. Я буду признателен за помощь, просто лучше проверить jsFiddle здесь, код, инициирующий childGrid и его редактор здесь, только для быстрого просмотра.

https://jsfiddle.net/Turo/7a0LLrdf/1/


function initDetail(e) { 
    $("<div/>").appendTo(e.detailCell).kendoGrid({ 
    dataSource: [{gender: "male",height: "2m", ageEdit: {Id: 1, Age: 40}}, 
    {gender: "female",height: "1.6m", ageEdit: {Id: 2, Age: 50}}], 
    columns: [ 
    {field: "gender"}, 
    { field: "height"}, 
    {field:"ageEdit", template: "#= ageEdit.Age #", editor: editAge}, 
    {command: ["edit"]}], 
    editable: {mode: "popup"} 
    }) 
} 

function editAge(container, options){ 
    $('<input required name="ageEdit"/>') 
    .appendTo(container) 
    .kendoDropDownList({ 
    dataTextField: "Age", 
    dataValueField: "Id", 
    dataSource: [{Id: 1, Age: 20}, {Id: 2, Age: 30}], 
    select: function(e){ 
     alert("how do I get to the detail grid instance from here?") 
    } 
}) 
} 

ответ

1

Вы можете использовать edit событие в Подвесная к find the DropDownList и bind его select обработчик:

edit: function(arg) { 
    arg.container 
     .find("[name=ageEdit]").data("kendoDropDownList").bind("select", function(j) { 
      var detailGrid = arg.sender; 
}); 

На стороне записки, чтобы установить идентификатор детали Grid, используйте значение ID соответствующей главной строки, которое доступно в detailInit событие, например:

$("<div id='detail-grid-" + e.data.id + "'></div>").appendTo()... 

Мастер Сетка должна иметь поле идентификатора, определенного в dataSource.schema.model.id для e.data.id работать, в противном случае вы должны использовать имя ID поля вместо id.

+1

Спасибо, мне на самом деле удалось прийти к аналогичным выводам в утреннее утро, хороший ответ. – Turo

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