Проверьте наличие строки деталей в сетке кендо


Я использую сетку кендо, которая имеет подсетку, которая сворачивается, пока пользователь не решит отменить ее выбор. Чтобы убедиться, что пользователь не получит возможность развернуть строку, в которой нет данных в подсетке, я бы хотел проверить каждую строку на наличие дочерних данных. Если данные есть, то должна появиться стрелка, если нет, то нет.

Чтобы соединить две сетки вместе, я использую

.ClientDetailTemplateId("MyTemplate")

Код, который я хочу запустить, выглядит примерно так

function dataBound(e) {
    var grid = e.sender;

    var gridData = grid.dataSource.view();
    expandGridDetailsSystem(e);

    for (var i = 0; i < gridData.length; i++) {
        //get the item uid
        var currentUid = gridData[i].uid;
        var currentRow = grid.table.find("tr[data-uid='" + currentUid + "']");
        var detailRow = currentRow.next(".k-detail-row");

        if (!detailRow) {
            //remove the expand button
            $(currentRow).find(".k-hierarchy-cell a").removeClass("k-icon k-i-expand");
        }
    }
    collapseGridDetailsSystem(e);
}

if (!gridData[i].HasSubGrid) это то, что я хотел бы сохраните логическое значение к. Проблема в том, что я понятия не имею, как проверить наличие ячейки k-detail. Особенно видно, что дефолт свернут.

Чтобы быть ясным, я хочу найти, имеет ли текущая строка дочернюю строку и если да, то измените элемент HasSubGrid перед выполнением оператора if.

Любая помощь в этом вопросе будет весьма признательна. Если вам нужна дополнительная информация, не стесняйтесь спрашивать.
1 2

1 ответ:

Если я не ошибаюсь, если вы активируете шаблоны деталей, все строки будут иметь стрелку expand, чтобы показать детали, независимо от того, есть ли у нее детали или нет. Это старая проблема на мой взгляд(проверьте здесь и здесь), так как вы должны исправить ее самостоятельно в событии dataBound, что довольно некрасиво. Учитывая это, все ваши строки будут иметь гарантированную строку детализации, которая будет скрыта до тех пор, пока не будет расширена строкаmaster .

Другими словами, для каждого tr.k-master-row в ваша сетка (которая на самом деле является отображаемой строкой с данными) будет иметь tr.k-detail-row рядом с ней, например:
<tr class='k-master-row'></tr>
<tr class='k-detail-row'></tr>
<tr class='k-master-row'></tr>
<tr class='k-detail-row'></tr>

Так что вы можете сделать...

var currentRow = grid.table.find("tr[data-uid='" + currentUid + "']"),
    detailRow = currentRow.next('.k-detail-row');

Чтобы иметь строку детализации.

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