Trình xem trước kết nối

Trình xem trước kết nối sẽ tạo bản xem trước trực quan cho kết nối đang chờ xử lý. Nó cung cấp cho bạn chỉ báo về vị trí khối kéo sẽ được kết nối khi giảm.

Trình xem trước kết nối mặc định đặt điểm đánh dấu chèn nơi các khối sẽ kết nối. Tính năng này cũng làm nổi bật các kết nối và làm mờ ảnh hưởng đến các khối sẽ bị thay thế và ngắt kết nối.

Bản minh hoạ trình xem trước tích hợp sẵn

Các loại kết nối đang chờ xử lý

Có hai loại kết nối đang chờ xử lý. Trong một trường hợp, khối bị bỏ thay thế khối hiện có và khối hiện có bị ngắt kết nối. Trong mô hình khác khối đã thả sẽ được chèn vào mà không ngắt kết nối các khối khác.

Thay thế

Quá trình thay thế diễn ra khi một kết nối trên khối đã kéo sẽ kết nối với một kết nối đã bị chặn và không có kết nối nào cho khối để được đính kèm lại. Khi khối đã kéo bị thả, khối được thay thế sẽ bị ngắt kết nối và khối đã kéo sẽ được kết nối vào vị trí của khối.

Theo mặc định, chúng tôi cho biết điều này bằng cách đặt hiệu ứng làm mờ trên khối đang được bị thay thế.

Tính năng thay thế tích hợp sẵn
bản nghe thử

Chèn

Việc chèn xảy ra trong 2 trường hợp. Điều này xảy ra khi một kết nối trên sẽ kết nối với một kết nối trống. Điều này xảy ra khi một kết nối trên khối được kéo sẽ chuyển đến một kết nối đã có nhưng có thể được chèn vào giữa hai khối hiện có, do đó mã hiện có không bị ngắt kết nối.

Theo mặc định, chúng tôi cho biết điều này bằng cách tạo các điểm đánh dấu chèn và đánh dấu các kết nối sẽ kết nối.

Tính năng chèn tích hợp sẵn
bản nghe thử

Tạo trình xem trước tuỳ chỉnh

Nếu muốn sử dụng hình ảnh khác để xem trước các kết nối đang chờ xử lý, bạn có thể tạo một phương thức triển khai IConnectionPreviewer tuỳ chỉnh.

Xây dựng và tiêu huỷ

Bạn cần triển khai một hàm khởi tạo và một phương thức loại bỏ cho IConnectionPreviewer.

Hàm khởi tạo được gọi mỗi khi bắt đầu kéo khối và được truyền giá trị đang được kéo. Nếu bạn cần khởi tạo bất kỳ trạng thái nào dựa trên bạn có thể thực hiện việc đó trong hàm khởi tạo.

class MyConnectionPreviewer implements IConnectionPreviewer {
  constructor(draggedBlock: Blockly.BlockSvg) {
    // Initialize state here.
  }
}

Phương thức dispose được gọi bất cứ khi nào một thao tác kéo khối kết thúc. Nếu bạn cần huỷ tham chiếu bất kỳ trạng thái nào khi thực thể IConnectionPreviewer bị huỷ bỏ, bạn nên làm việc đó ở đây.

dispose() {
  // Dispose of and dereference any state.
}

Tạo bản xem trước

IConnectionPreviewer của bạn cần triển khai logic để xem trước trực quan kết nối.

Thay thế

Để xem trước nội dung thay thế, hãy triển khai previewReplacement .

previewReplacement(draggedConn, staticConn, replacedBlock) {
  // Visually indicate that the replacedBlock will be disconnected, and the
  // draggedConn will be connected to the staticConn.
}

Chèn

Để xem trước các trường hợp chèn, hãy triển khai phương thức previewConnection.

previewConnection(draggedConn, staticConn) {
  // Visually indicate the draggedConn will be connected to the staticConn.
}

Nếu bạn muốn có một bản xem trước khác, tuỳ thuộc vào việc khối được kéo có được kết nối với một đầu vào trống hoặc nếu mã này được chèn giữa các khối, bạn có thể kiểm tra xem staticConn hiện có được kết nối với kết nối nào khác không. Nếu staticConn hiện đang được kết nối thì draggedConn đang được kết nối được chèn giữa các khối.

previewConnection(draggedConn, staticConn) {
  if (staticConn.targetConnection) {
    // The dragged block is being inserted between blocks.
  } else {
    // The dragged block is connecting to an empty input.
  }
}

Bản xem trước CSS

Bạn có thể xem trước các kết nối bằng cách áp dụng css cho khối. Ví dụ: Chế độ làm mờ thay thế mặc định được bật/tắt bằng cách thêm lớp CSS blocklyReplaceable vào khối.

previewReplacement(draggedConn, staticConn, replacedBlock) {
  Blockly.utils.dom.addClass(replacedblock.getSvgRoot(), 'my-custom-class');
}

Bản xem trước trình kết xuất

Bạn có thể xem trước các kết nối bằng cách triển khai trình kết xuất tuỳ chỉnh có nội dung hấp dẫn xem trước đặc biệt.

previewReplacement(draggedConn, staticConn, replacedBlock) {
  const renderer = replacedBlock.workspace.getRenderer()
  if (renderer.addReplacementIndicator) {
    renderer.addReplacementIndicator(replacedBlock);
  }
}

Ẩn bản xem trước

IConnectionPreviewer của bạn cần có khả năng ẩn bản xem trước. Thao tác này sẽ được gọi khi khối được kéo di chuyển ra khỏi phạm vi của tất cả các kết nối, vì vậy không có bản xem trước nào sẽ xuất hiện. Lệnh này cũng được gọi ngay trước khi hệ thống xử lý trình xem trước.

hidePreview() {
  // Remove CSS classes, toggle renderer methods, etc.
}

Đăng ký và sử dụng

Cuối cùng, sau khi hoàn tất việc tạo IConnectionPreviewer, bạn bạn cần đăng ký tài khoản. Thao tác này sẽ liên kết trình kết xuất với một chuỗi để bạn có thể hãy chuyển tệp đó vào cấu hình chèn. Bạn cũng có thể chuyển Lớp IConnectionPreviewer (tức là hàm khởi tạo) trực tiếp vào nội dung chèn .

Blockly.registry.register(
  Blockly.registry.Type.CONNECTION_PREVIEWER,
  'MyConnectionPreviewer',
  MyConnectionPreviewer,
);

// You can use the string.
const myWorkspace = Blockly.inject({
  // options...
  plugins: {
    connectionPreviewer: 'myConnectionPreviewer',
  },
};

// Or you can pass the class / constructor directly.
const myWorkspace = Blockly.inject({
  // options...
  plugins: {
    connectionPreviewer: MyConnectionPreviewer,
  },
};

Để biết thêm thông tin về cách đăng ký, hãy xem Chèn các lớp con.