2017-01-13 4 views
3

В AngularJS ng-options позволяет указать массив любых значений, а не только строк, сохраняя при этом типы. Например, я могу создать HTML select с использованием ng-options над массивом целых чисел. Когда выбрана опция, значение помещается в модель без необходимости преобразования строки в конец.Elm: сохранить тип значений в HTML select?

В Elm атрибут value опции принимает только строку, и поэтому событие отправляет обратно строку. Затем мне нужно вручную преобразовать его в int.

Есть ли у Elm эквивалент AngularJS ng-options? Или любой способ использовать select с произвольными, даже нескалярными значениями?

+0

Ну, я не конечно, вы хотели бы использовать его, но я сделал упражнение этого вопроса в форме блога и пакета. – toastal

ответ

5

На самом деле нет способа сделать это. Вам придется разбираться со строкой до нужного вам типа и обратно. Вы могут обернуть a <select> с Prism на основе API.

Дайте мне пару часов, и я напишу маленькую библиотеку, что после работы ...: D

EDIT:

Пакет - http://package.elm-lang.org/packages/toastal/select-prism/latest

Блог Пост - https://toast.al/posts/2017-01-13-playing-with-prisms-for-the-not-so-isomorphic.html

+0

Это очень полезно. Я новичок в Elm и еще не встречался с Призмой, поэтому я определенно буду изучать это больше. Спасибо за сообщение в блоге тоже! – jchamberlain

+1

Возьмите его с солью. Оптика не считается лучшей практикой для некоторых людей FP, другие любят ее. Вы могли бы легко повторно реализовать эту библиотеку с явными параметрами get/set, а не передавать в Prism, но где интересно узнать что-то новое в этом? – toastal

3

Вы также можете быть заинтересованы в моей вспомогательной библиотеке elm-select. Она не делает все, что охладиться Prism/Lens вещи, но это может быть проще в некоторых случаях:

http://package.elm-lang.org/packages/lgastako/elm-select/1.0.0/Select

Полный пример кода здесь:

https://github.com/lgastako/elm-select/blob/master/src/Main.elm

+0

Это тоже хорошо. Я ослеплен тем, что вы считали, что объективы и призмы были «крутыми». :) – toastal

+0

Это здорово! Я принимаю ответ @ toastal из-за его глубины, но, честно говоря, я, вероятно, в конечном итоге использую вашу библиотеку, так как это так просто. Благодаря! – jchamberlain

+0

На самом деле вы не можете, потому что он несовместим с Elm 0.18 – toastal

Смежные вопросы