2017-02-02 10 views
1

У меня есть функция нормального просмотра view : Model -> Html Msg.Elm получить html Никогда

Теперь мне нужно, чтобы продукт с этого вида Html Never, который просто удаляет все обработчики событий.

Моя первая идея состояла в использовании Html.map с функцией Msg -> Never, но я не знаю, как ее определить, так как Never не имеет значений.

Есть ли трюк, чтобы сделать эту работу?

+4

Кастинг 'Html Msg' в' Html Never' открывает окно для наличия узлов HTML с возможно сломанными прослушивателями событий, что является плохой идеей (утечка памяти или непредвиденное поведение). Вам придется написать собственную функцию для проверки фактов узлов (прослушивателей событий) и удалить их из представления Java виртуальных узлов DOM, так что это фактически «работает» и удаляет все «Msg» для узлов. ** TL; DR: ** то, что вы хотите, является опасной идеей, и Элм не допускает этого по какой-то причине. Не могли бы вы поделиться более подробной информацией о конечных целях? – halfzebra

+0

Спасибо @halfzebra. Я должен признать, что я не совсем понимаю ваш комментарий ... Во всяком случае, я пытаюсь использовать https://github.com/rupertlssmith/elm-server-side-renderer для печати строки, содержащей исходную визуализированную версию моего представления ; библиотека всегда использует 'Html Never'. Мне нужен способ конвертировать мой «Html Msg» в «Html Never», чтобы его можно было использовать там. – marcosh

+0

Я предполагаю, что вы хотите повторно использовать некоторые из интерфейсных кода, которые вы имеете для рендеринга на стороне сервера. Насколько мне известно, серверный рендеринг для Elm существует только как эксперимент (на данный момент). Наличие представлений с надписью «Html Msg» на стороне сервера немного странно, потому что они не должны излучать какие-либо события. – halfzebra

ответ

0

Html Never был бы без каких-либо обработчиков событий. Если вы хотите сопоставить это представление с типом Html Msg, вы можете использовать Html.map never. Функция never определена в ядре.

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