Выполните действие после завершения метода render()
мне нужно сделать некоторые действия, когда 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
и преобразовать их в другие конструкции (на основе ). Мне нужно заменить ".operationList" divs
со сложной структурой с обработчиками событий.
2 ответов
основной ответ-нет ! То, что вы предлагаете, является очень плохим дизайном и противоречит основным принципам и архитектуре SlickGrid.
вы в конечном итоге делаете много избыточной работы и отрицаете большинство преимуществ производительности SlickGrid. Сетка будет создавать и удалять узлы DOM строк на лету при прокрутке и делать это синхронно или асинхронно в зависимости от того, какой из них подходит лучше всего в то время. Если вы должны иметь богатый интерактивный контент в ячейки, используйте пользовательские визуализаторы ячеек и делегируйте всю обработку событий на уровень сетки, используя предоставленные события, такие как onClick. Если содержимое ячейки абсолютно невозможно создать с помощью рендеринга, используйте async post-rendering -http://mleibman.github.com/SlickGrid/examples/example10-async-post-render.html. Тем не менее, содержимое сетки не должно иметь прослушивателей событий, зарегистрированных непосредственно на узлах DOM.
чтобы обратиться к комментарию @magiconair, вы действительно не должны визуализируйте весь SELECT со всеми его параметрами и обработчиками событий, пока ячейка не переключится в режим редактирования.
чтобы ответить на мой собственный комментарий, я придумал следующее hack. Это может быть не очень красиво, но, кажется, работает.
добавьте следующую строку в 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');
});