Как выполнить код после полного рендеринга koGrid?

Я работаю с когридом. Я хочу применить всплывающую подсказку к каждой ячейке в определенном столбце на основе данных в этом столбце. Моя проблема заключается в том, чтобы найти, когда и где разместить всплывающую подсказку jquery:

$('[data-toggle="tooltip"]').tooltip();

colDef, который я использую:

var myCol = {
    headerClass: 'koGridCentered',
    displayName: 'My Display',
    field: 'RootError',
    cellTemplate: '<div style="margin-top: 3px;" >' +
        '<div data-bind=" attr: { \'class\': \'kgCellText colt\' + $index() }">' +
            '<a href="#" data-toggle="tooltip" data-bind=" attr: { \'title\': $data.getProperty($parent) }, html: $data.getProperty($parent)"></a>' +
        '</div>' +
    '</div>',
    sortable: true, resizeable: true
}

Данные возвращаются из запроса ajax. Я попытался поместить jquery в блок axaxStop:

$(document).ajaxStop(function() {
    $('[data-toggle="tooltip"]').tooltip();
}

Но это вызывается до того, как kogrid отобразит все строки.

Я прибегнул к использованию setTimeout и просто задержал на X миллисекунд, а затем применил всплывающую подсказку, и это работает, но это похоже на взлом.

$(document).ajaxStop(function() {
    setTimeout(function() {
        $('[data-toggle="tooltip"]').tooltip();
    }, 10);
});

Я также попытался вызвать всплывающую подсказку после ввода моих данных в мою модель представления.

for (var i = 1; i < data.length; ++i) {
    _this.SharedViewModel.MyCollection.push(ko.mapping.fromJS(data[i]));
}
$('[data-toggle="tooltip"]').tooltip();

Это приводит к тому, что всплывающая подсказка применяется к первым приблизительно 7 строкам, а не к остальным строкам.

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

Есть еще одна небольшая проблема, которую я заметил: моя всплывающая подсказка скрыта под ячейкой kogrid над ней. Но это второстепенно, и я надеюсь решить с помощью z-индекса.


person Aaron Palmer    schedule 18.08.2015    source источник
comment
Вероятно, вам следует использовать Knockout, под которым я подразумеваю, что вы не должны использовать jQuery, чтобы возиться с DOM вне обработчика привязки. Создайте собственный обработчик привязки для всплывающей подсказки. Или, возможно, вам поможет billpull.com/knockout-bootstrap.   -  person Roy J    schedule 18.08.2015
comment
@RoyJ - спасибо за совет по нокаут-бутстрапу! Я пытался выяснить синтаксис пользовательского обработчика привязки, и нокаут-бутстрап реализует его для меня. Вы должны превратить свой комментарий в ответ. Спасибо.   -  person Aaron Palmer    schedule 18.08.2015


Ответы (1)


В Knockout вы должны взаимодействовать с элементами View только через обработчики привязки. Knockout-Bootstrap предоставляет множество обработчиков привязки для виджетов Bootstrap.

person Roy J    schedule 18.08.2015