Tôi thêm <div>
s vào trình bao bọc <div>
và tôi cần có thể cuộn đến phần cuối cùng được thêm vào mỗi lần. Làm thế nào để làm điều này trong Elm?Cách tự động cuộn xuống dưới cùng của div trong Elm
<div class="messages" style="height: 7em; overflow: scroll">
<div>Anonymous: Hello</div>
<div>John: Hi</div>
</div>
trực giác, nó có vẻ như tôi có thể gọi một port
chạy mã JavaScript element.scrollTop = element.scrollHeight
:
AddChatMessage chatMessage ->
({ model | chatMessages = model.chatMessages ++ [ chatMessage ] } , scrollToBottomPort "div.messages")
Vấn đề là scrollToBottom
được gọi trước các model
được cập nhật. Vì vậy, không có vấn đề lớn, tôi chuyển đổi nó thành một Task
. Nhưng vẫn còn, mặc dù các model
được cập nhật đầu tiên ngay bây giờ, các view
không được cập nhật được nêu ra. Vì vậy, tôi cuối cùng di chuyển đến mục thứ 2 từ phía dưới!
Điều này có thể dẫn đến một câu hỏi chung chung tôi tò mò về Elm, làm thế nào để bạn chạy một Cmd
sau khi xem được cập nhật do sự thay đổi trong mô hình?
Bạn có thể xem ứng dụng chính thức của TodoMVC elm. Tôi nghĩ rằng nó chỉ làm điều đó. (Trên thiết bị di động ngay bây giờ, nếu không sẽ có liên kết được chia sẻ). – wintvelt
@wintvelt, Đây là ứng dụng TodoMVC Elm: https://github.com/evancz/elm-todomvc/blob/master/Todo.elm. Tôi không thấy bất cứ điều gì trong đó về di chuyển, chỉ có một cuộc gọi 'Dom.focus'. 'index.html' và tệp CSS cũng không cung cấp bất kỳ chỉ báo nào về tự động cuộn. –
Bạn nói đúng. Nó không có trong ứng dụng todomvc. Lỗi của tôi. Sẽ thêm một câu trả lời dưới đây. – wintvelt