2011-07-01 26 views
6

Làm thế nào để bạn có được nội dung của các yếu tố ui khi sử dụng chuối phản ứng? Event0 trả về một sự kiện kiểu Event(), có loại đơn vị thay vì loại điều khiển. event1 có một sự kiện kiểu Event w (a -> IO()), nhưng lệnh là loại Event w (IO()). mapAccumE và mapAccumB nhận các hàm thuần túy làm tham số, vì vậy không thể sử dụng get text foo với chúng.Đầu vào giao diện người dùng với phản ứng-chuối-wx

Trả lời

4

Về cơ bản, bạn muốn làm việc với các hàm thay vì dữ liệu. Nếu bạn đang nghĩ "Làm thế nào để tạo một hành vi có văn bản hiện tại trong một hộp", bạn không. Thay vào đó, bạn viết các hàm lấy văn bản hiện tại làm tham số và truyền nó khi cần thiết. Giả sử bạn muốn in nội dung của một hộp văn bản khi nhấn một nút. Sau đó, bạn sẽ làm điều gì đó như thế này:

eButton :: NetworkDescription (Event()) 
eButton = event0 button command 

network = do 
    pressButton <- eButton 
    reactimate $ (\() -> get text foo >>= print) <$> pressButton 

Nếu bạn cần để có được đầu vào thành một hành vi, bạn tương tự có thể sử dụng một chức năng với kiểu Behavior (String -> a) (hoặc bất kỳ loại bạn cần), và sau đó chỉ cần vượt qua chuỗi trong lúc điểm của cuộc gọi reactimate.

4

(Tác giả của reactive-banana nói. Xin lỗi vì những lời cuối, khả năng câu hỏi được hỏi ở đây thậm chí không vượt qua tâm trí của tôi. :-))

tôi phát hiện ra ngày hôm nay rằng tôi bỏ qua một tính năng rất quan trọng từ thư viện: nhận nội dung của phần tử giao diện người dùng dưới dạng Behavior. Lúng túng! :-D

John mô tả cách giải quyết hiện tại, nhưng phiên bản tiếp theo của chuối phản ứng sẽ bao gồm tính năng bị thiếu.

EDIT: Tôi đã phát hành phản ứng-chuối version 0.4 mà hiện nay bao gồm các chức năng trong hình thức của một hàm

fromPoll :: IO a -> NetworkDescription (Behavior a) 
Các vấn đề liên quan