blockly > Sự kiện

Không gian tên sự kiện

Lớp

Lớp Mô tả
BlockBase Lớp trừu tượng cho mọi sự kiện liên quan đến các khối.
BlockChange Thông báo cho trình nghe khi một số phần tử của một khối đã thay đổi (ví dụ: giá trị trường, nhận xét, v.v.).
BlockCreate Thông báo cho trình nghe khi một khối (hoặc ngăn xếp khối được kết nối) được tạo.
BlockDelete Thông báo cho trình nghe khi một khối (hoặc ngăn xếp khối được kết nối) bị xoá.
BlockDrag Thông báo cho trình nghe khi một khối đang được kéo/thả theo cách thủ công.
BlockFieldIntermediateChange Thông báo cho trình nghe khi giá trị của trường trong một khối đã thay đổi nhưng thay đổi chưa hoàn tất và dự kiến sẽ theo sau là một sự kiện thay đổi khối.
BlockMove Thông báo cho trình nghe khi một khối được di chuyển. Điều này có thể xảy ra từ một kết nối đến một kết nối khác hoặc từ một vị trí trên không gian làm việc đến một vị trí khác.
BubbleOpen Lớp cho sự kiện mở bong bóng trò chuyện.
Số lượt nhấp Thông báo cho trình nghe rằng một số phần tử khối đã được nhấp vào.
CommentBase Lớp trừu tượng cho sự kiện bình luận.
CommentChange Thông báo cho trình nghe rằng nội dung của một nhận xét trong không gian làm việc đã thay đổi.
CommentCollapse
CommentCreate Thông báo cho trình nghe rằng một nhận xét về không gian làm việc đã được tạo.
CommentDelete Thông báo cho trình nghe rằng một bình luận trên không gian làm việc đã bị xoá.
CommentDrag Thông báo cho trình nghe khi một bình luận đang được kéo/thả theo cách thủ công.
CommentMove Thông báo cho trình nghe rằng một nhận xét trong không gian làm việc đã được di chuyển.
CommentResize Thông báo cho trình nghe rằng một nhận xét trong không gian làm việc đã đổi kích thước.
FinishedLoading Thông báo cho trình nghe khi không gian làm việc đã hoàn tất quá trình chuyển đổi tuần tự từ JSON/XML.
Đã chọn Lớp cho một sự kiện đã chọn. Thông báo cho trình nghe rằng một phần tử mới đã được chọn.
ThemeChange Thông báo cho trình nghe rằng giao diện không gian làm việc đã thay đổi.
ToolboxItemSelect Thông báo cho trình nghe rằng một mục trong hộp công cụ đã được chọn.
TrashcanOpen Thông báo cho trình nghe khi thùng rác đang mở hoặc đóng.
UiBase Lớp cơ sở cho một sự kiện trên giao diện người dùng. Sự kiện giao diện người dùng là những sự kiện không cần được gửi qua mạng để tính năng chỉnh sửa nhiều người dùng hoạt động (ví dụ: cuộn không gian làm việc, thu phóng, mở các danh mục hộp công cụ). Các sự kiện trên giao diện người dùng không huỷ hoặc làm lại.
VarBase Lớp trừu tượng cho một sự kiện biến.
VarCreate Thông báo cho trình nghe rằng một mô hình biến đã được tạo.
VarDelete Thông báo cho trình nghe rằng một mô hình biến đã bị xoá.
VarRename Thông báo cho trình nghe rằng một mô hình biến đã được đổi tên.
VarTypeChange Thông báo cho trình nghe rằng loại của biến đã thay đổi.
ViewportChange

Thông báo cho trình nghe rằng vị trí hoặc tỷ lệ của nền tảng không gian làm việc đã thay đổi.

Không thông báo khi không gian làm việc tự thay đổi kích thước.

Lớp trừu tượng

Lớp trừu tượng Mô tả
Trừu tượng Lớp trừu tượng cho một sự kiện.

Liệt kê

Liệt kê Mô tả
BubbleType
ClickTarget

Hàm

Chức năng Mô tả
clearPendingUndo() Sửa đổi các sự kiện huỷ đang chờ xử lý để khi được kích hoạt, các sự kiện này không rơi vào ngăn xếp huỷ. Được gọi bởi Workspace.clearUndo.
disable() Dừng gửi sự kiện. Mọi lệnh gọi đến hàm này cũng PHẢI gọi enable.
disableOrphans(event) Đặt xem một khối có bị vô hiệu hoá hay không tuỳ thuộc vào việc khối đó có được kết nối đúng cách hay không. Sử dụng phương thức này trên các ứng dụng mà tất cả các khối phải được kết nối với một khối trên cùng.
enable() Bắt đầu gửi sự kiện. Trừ phi các sự kiện đã bị tắt khi lệnh gọi tương ứng để tắt được thực hiện.
filter(queue)

Lọc các sự kiện trong hàng đợi bằng cách hợp nhất các sự kiện trùng lặp, xoá các sự kiện rỗng và ghi lại các sự kiện BlockChange.

Nhật ký của hàm này:

Ban đầu, hàm này được thêm vào trong thay đổi cf257ea5 với mục đích giảm đáng kể tổng số sự kiện được gửi. Ban đầu, tính năng này chỉ ảnh hưởng đến các sự kiện BlockMove, nhưng theo thời gian, các sự kiện khác cũng được thêm vào.

Mã đã được thêm vào để sắp xếp lại các sự kiện BlockChange được thêm trong thay đổi 5578458, vì lý do không chắc chắn nhưng có thể là một phần của nỗ lực chỉ thành công một phần để khắc phục các vấn đề về thứ tự sự kiện trong quá trình đột biến khối. Mã này có lẽ đã được thêm vào đầu hàm, trước khi hợp nhất và xoá giá trị rỗng, nhưng đã được thêm vào cuối vì lý do đã quên. Hãy xem các cuộc điều tra lỗi này để thảo luận đầy đủ hơn về vấn đề cơ bản và một số lỗi phát sinh do bản sửa lỗi không đầy đủ/không chính xác này:

https://github.com/google/blockly/issues/8225#issuecomment-2195751783 https://github.com/google/blockly/issues/2037#issuecomment-2209696351

Sau đó, trong PR #1205, phương thức triển khai O(n^2) ban đầu đã được thay thế bằng phương thức triển khai theo thời gian tuyến tính, mặc dù các bản sửa lỗi bổ sung đã được thực hiện sau đó.

Vào tháng 8 năm 2024, chúng tôi đã đơn giản hoá một số điểm quan trọng:

Trước đây, hàm này được gọi từ Workspace.prototype.undo, nhưng việc thay đổi các sự kiện bằng hàm này là nguyên nhân gây ra vấn đề #7026 (lưu ý rằng các sự kiện sẽ kết hợp theo thứ tự ngược lại so với thứ tự chuyển tiếp). Giải pháp ban đầu được chọn cho vấn đề này là thêm (trong PR #7069) mã vào fireNow để lọc sau .undoStack_ và .redoStack_ của bất kỳ không gian làm việc nào vừa tham gia vào việc gửi sự kiện; rõ ràng là điều này đã giải quyết được vấn đề nhưng lại làm tăng thêm độ phức tạp đáng kể và khiến khó lý giải cách xử lý sự kiện để huỷ/làm lại, vì vậy, cả lệnh gọi từ thao tác huỷ và mã xử lý sau đều bị xoá, đồng thời forward=true được đặt làm mặc định trong khi gọi hàm có forward=false không còn được dùng nữa.

Đồng thời, mã có lỗi để sắp xếp lại các sự kiện BlockChange đã được thay thế bằng phiên bản ít lỗi hơn của cùng một chức năng trong một hàm mới, enqueueEvent, được gọi từ fireInternal, do đó đảm bảo rằng các sự kiện sẽ theo đúng thứ tự tại thời điểm bộ lọc được gọi.

Ngoài ra, mã hợp nhất sự kiện đã được sửa đổi để chỉ hợp nhất các sự kiện liền kề. Điều này giúp đơn giản hoá việc triển khai trong khi vẫn đảm bảo rằng việc hợp nhất các sự kiện không thể khiến chúng bị sắp xếp lại.

fire(event)

Thêm một sự kiện vào hàng đợi để gửi cho trình nghe thay đổi.

Lưu ý:

– Các sự kiện được đưa vào hàng đợi cho đến khi hết thời gian chờ, thường là sau khi kết thúc quá trình kết xuất hoặc khi kết thúc tác vụ vi mô hiện tại, nếu không chạy trong trình duyệt. – Các sự kiện trong hàng đợi có thể bị sửa đổi theo cách huỷ bỏ bằng cách kết hợp với các sự kiện được thêm vào hàng đợi sau này, nhưng chỉ cho đến khi các sự kiện đó được kích hoạt. – Các sự kiện được gửi qua phương thức fireChangeListener trên không gian làm việc bị ảnh hưởng.

fromJson(json, workspace) Giải mã JSON thành một sự kiện.
get(eventType) Lấy lớp cho một loại sự kiện cụ thể từ sổ đăng ký.
getGroup() Nhóm hiện tại.
getRecordUndo() Trả về việc các sự kiện có được thêm vào ngăn xếp huỷ hay không.
isEnabled() Trả về kết quả về việc có thể kích hoạt sự kiện hay không.
setGroup(state) Bắt đầu hoặc dừng một nhóm.
setRecordUndo(newValue) Đặt xem có nên thêm sự kiện vào ngăn xếp huỷ hay không.

Giao diện

Giao diện Mô tả
AbstractEventJson
BlockBaseJson
BlockChangeJson
BlockCreateJson
BlockDeleteJson
BlockDragJson
BlockFieldIntermediateChangeJson
BlockMoveJson
BubbleOpenJson
ClickJson
CommentBaseJson
CommentChangeJson
CommentCollapseJson
CommentCreateJson
CommentDragJson
CommentMoveJson
CommentResizeJson
SelectedJson
ThemeChangeJson
ToolboxItemSelectJson
TrashcanOpenJson
VarBaseJson
VarCreateJson
VarDeleteJson
VarRenameJson
VarTypeChangeJson
ViewportChangeJson

Biến

Biến Mô tả
BLOCK_CHANGE
BLOCK_CREATE
BLOCK_DELETE
BLOCK_DRAG
BLOCK_FIELD_INTERMEDIATE_CHANGE
BLOCK_MOVE
BUBBLE_OPEN
BUMP_EVENTS

Danh sách các sự kiện khiến đối tượng bị đẩy trở lại phần hiển thị của không gian làm việc.

Đừng nhầm lẫn với việc đẩy để các kết nối đã ngắt kết nối không xuất hiện là đã kết nối.

THAY ĐỔI
NHẤP
COMMENT_CHANGE
COMMENT_CREATE
COMMENT_DELETE
COMMENT_DRAG
COMMENT_MOVE
COMMENT_RESIZE
TẠO
XOÁ
FINISHED_LOADING
MOVE
ĐÃ CHỌN
THEME_CHANGE
TOOLBOX_ITEM_SELECT
TRASHCAN_OPEN
Giao diện người dùng (UI)
VAR_CREATE
VAR_DELETE
VAR_RENAME
VIEWPORT_CHANGE

Loại bí danh

Loại bí danh Mô tả
BumpEvent

Loại sự kiện khiến các đối tượng bị đẩy trở lại phần hiển thị của không gian làm việc.

Đừng nhầm lẫn với việc đẩy để các kết nối đã ngắt kết nối không xuất hiện là đã kết nối.