Выполнить действие после завершения метода render () - PullRequest
8 голосов
/ 03 июня 2011

Мне нужно выполнить какое-то действие, когда метод render() завершит свою работу и добавит все элементы HTML в DOM.Как подписаться на событие onRenderEnds (такого события нет)?Могу ли я написать свое собственное событие вне кода slickgrid и прикрепить его к методу render()?


Есть некоторые события "onScroll", "onViewportChanged", но они произошли до того, как render() завершился (в некоторых случаях).


Обновление: я пишу форматер для столбца:

formatter: function(row, cell, value, columnDef, dataContext){
    return "<div class='operationList' data-my='" + myData + "'></div>";            
}

Когда сетка отображается (применяя мой форматер), мне нужно пройти через все ".operationList" divs и преобразовать их в другие конструкции (на основепо атрибуту data-my).Мне нужно заменить ".operationList" divs на сложную структуру с обработчиками событий.

Ответы [ 2 ]

8 голосов
/ 04 ноября 2011

Чтобы ответить на мой собственный комментарий, я придумал следующий хак .Это может быть не красиво, но, похоже, работает.

Добавьте следующую строку в метод render() чуть ниже renderRows(rendered);

function render() {
    ...
    renderRows(rendered);
    trigger(self.onRenderCompleted, {}); // fire when rendering is done
    ...
}

Добавьте новый обработчик событий в публичный API:

"onRenderCompleted":            new Slick.Event(),

Привязка к новому событию в вашем коде:

grid.onRenderCompleted.subscribe(function() {
    console.log('onRenderCompleted');
});
4 голосов
/ 22 ноября 2011

Основной ответ - НЕ! То, что вы предлагаете, является очень плохим дизайном и идет вразрез с основными принципами и архитектурой SlickGrid.

В итоге вы будете выполнять много лишней работы и сводить на нет большинство преимуществ производительности SlickGrid. Сетка создаст и удалит рядные DOM-узлы на лету во время прокрутки и сделает это синхронно или асинхронно в зависимости от того, какой из них лучше всего подходит в данный момент. Если вам необходимо иметь богатый интерактивный контент в ячейках, используйте настраиваемые средства визуализации ячеек и делегируйте всю обработку событий на уровень сетки, используя предоставленные им события, такие как onClick. Если содержимое ячейки абсолютно невозможно создать с помощью рендерера, используйте асинхронный пост-рендеринг - http://mleibman.github.com/SlickGrid/examples/example10-async-post-render.html. Даже в этом случае для содержимого сетки не должно быть никаких прослушивателей событий, зарегистрированных непосредственно для узлов DOM.

Чтобы ответить на комментарий @ magiconair, вам действительно не следует отображать целый SELECT со всеми его опциями и обработчиками событий, пока ячейка не перейдет в режим редактирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...