2016-06-15 2 views
1

Учитывая список строк, я хочу создать список HTML-div, чтобы ввести его в поле зрения: Я задавался вопросом, что подпись функции должна быть такой, как следующее:ELM: ошибка при вложении (список HTML) в аргументе div второй

display : List String -> List Html div 

и тело функции:

display model = case model of 
    [] -> [] 
    (x::xs) -> div [][ text x] :: display xs 

когда embeding вышеуказанной функции в представлении в соответствии с ниже (как я знаю ДИВ функции принимает список Html в качестве второго аргумента div : List Attribute -> List Html -> Html)

view : Model -> Html Msg 
    view model = div [] 
        [ 
        input [ placeholder "write your post here" , onInput Change][] 
        , button [onClick Save ][text "save"] 
        ,div [][ display model.lst ] 

Я получаю ниже ошибки при компиляции:

The 2nd argument to function `div` is causing a mismatch. 

24|      div [][ display model.lst ] 
           ^^^^^^^^^^^^^^^^^^^^^ 
Function `div` is expecting the 2nd argument to be: 

    List (VirtualDom.Node a) 

But it is: 

    List (List (Html a)) 

, как я мог бы разобраться в этом, СПАСИБО

ответ

4

Сообщение об ошибке о линии div [][ display model.lst ] состояния, которые вы пытаетесь встроить список в списке. Поскольку возвращаемое значение display уже является списком, его не нужно обертывать в скобки. Попробуйте вместо этого:

div [] (display model.lst) 

Затем вы увидите, что есть проблема с типом аннотаций для display. Вам не хватает скобок, потому что List принимает только один аргумент типа. Оно должно быть:

display : List String -> List (Html div) 

И как примечание стороны, в этой подписи для display, у вас есть Html div. То, что div не означает, что он возвращает фактический div. Метка в нижнем регистре в аннотации типа в основном означает, что все может туда идти. Вы часто увидите, что люди используют короткие ярлыки для этого типа, например Html a, так как ввод div может быть запутанным. Другая альтернатива согласуется с остальной частью кода представления и использует Html Msg. В любом случае, в этом конкретном случае, это хорошо; это просто вопрос конвенции.

+0

Благодарим вас за информацию, я нахожу это «Ярлык в нижнем регистре в аннотации типа в основном означает, что что-то может пойти туда», немного запутанно, можно было бы проработать –

+1

Значения верхнего и нижнего регистра в Elm значительны несколькими способами. Взгляните на раздел [Типы чтения] (http://guide.elm-lang.org/types/reading_types.html) руководства. –

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