상위 키 함수를 작성하여 특정 키 코드 만 캡처하는 함수를 작성하려고합니다. 이 코드는 Enter 함수 만 캡처하는 todomvc 구현의 Evan의 "onEnter"함수에서 영감을 얻었습니다.키보드 이벤트에 대해 elm 고차 함수 사용
onKeyCode : Int -> Msg -> Attribute Msg
onKeyCode keycode msg =
let
captureKey code =
if code == keycode then
msg
else
NoOp
in
on "keydown" (Json.map captureKey keyCode)
onEnter = onKeyCode 13
onEsc = onKeyCode 27
그리고는 지금은 뷰어에 입력 구성 요소에 그것을 추가 할 :
input
[ class "edit"
, id ("todo-" ++ toString item.uid)
, value item.message
, onInput (UpdateItem item.uid)
, onBlur (SwitchEditTodo item.uid False)
, onEnter (SwitchEditTodo item.uid False)
, onEsc (UndoEditTodo item.uid)
]
[]
난 단지 예상대로 onEnter 코드가 작동하는 경우하지만 난 onEsc를 추가 할 경우 onEnter 코드가 실행되지 않습니다. 실수는 어디에서하고 있습니까? 고차원 함수 문맥에 문제가 있거나 별도의 함수에서 여러 값으로 "on"으로 매핑 한 것입니까?
당신의 코멘트에서 나는이 덮어 쓰기 효과가 html/JavaScript에서 나오는 부작용이라는 것을 이해합니다. 왜냐하면 나는 여러 "on"이벤트를 만들었지 만, 결국 JavaScript API를 호출하여 자신을 덮어 씁니다. –
맞습니다. 같은 이름의 여러 html 속성의 제한 사항이며 Elm의 제한 사항은 아닙니다 (일부 경고는 유용 할지라도). 원시 HTML에서 똑같은 작업을하려고하면 같은 문제가 나타납니다. –