2017-01-14 15 views
2

Есть ли функция в purescript-halogen, чтобы выбрать элемент по его id, или мне нужно выполнить его собственную роль (что было бы очень странно для меня).Выбор элементов по идентификатору в Purescript

Я читаю документацию по преследованию, и я вижу функцию selectElement в Util, но нигде я не вижу что-то, что позволяет мне выбирать по id.

я могу использовать getElementById :: ElementId -> NonElementParentNode -> Eff() (Nullable Element) получить Element, но я не знаю, как превратить этот Element в HTMLElement.

Функция поиска типа в Pursuit также отсутствует, поэтому извиняюсь за этот наивный вопрос.

+0

Вы не можете безопасно превратить элемент 'Element' в' HTMLElement'. Попробуйте 'selectElement" #id "'. Но лучший способ - изменить 'HTMLElement' на' Node' подписи 'Halogen.VDom.Driver.runUI', потому что галоген не нуждается в' HTMLElement' позже. –

ответ

2

Это не то, что вы обычно должны делать при работе с библиотеками, использующими виртуальную DOM, так как если вы сохраните ссылку на элемент по id, она может закончиться устаревшей и ссылаться на совершенно другой элемент или элемент который больше не привязан к DOM.

Способ получения элемента состоит в использовании ref, есть пример его использования in this section of the guide. Он работает как обработчик событий, когда запрос возникает над компонентом всякий раз, когда элемент возникает или удаляется. Если вы используете запрос, который обновляет ссылку в состоянии компонента, вы можете быть уверены, что знаете, что у вас всегда есть нужный элемент (или Nothing, если он по какой-то причине не существует).

Если вы действительно хотите использовать getElementById, то it is available from purescript-dom. Он не является частью галогена, поскольку галоген не предназначен для манипуляций с DOM общего назначения. Эти функции полезности предоставляются только для облегчения инициализации приложения Halogen.