Bağlantı önizleyenler

Bağlantı önizleyici, bekleyen bir bağlantının görsel önizlemesini oluşturur. Bu, sürüklenen bloğun bırakıldığında nereye bağlanacağını gösterir.

Varsayılan bağlantı önizleyici, blokların bağlanacağı yerlere ekleme işaretçileri yerleştirir. Ayrıca bağlantıları vurgular ve değiştirilecek ve bağlantısı kesilecek bloklara soluk efekt uygular.

Yerleşik önizleyicinin gösterimi

Beklemedeki bağlantı türleri

Bekleyen bağlantılar iki türdedir. Bir durumda, bırakılan blok mevcut bir bloğun yerini alır ve mevcut bloğun bağlantısı kesilir. Diğer durumda, bırakılan blok diğer blokların bağlantısı kesilmeden eklenir.

Değiştirme

Değişim, sürüklenen bloktaki bir bağlantı, zaten bir bloğa sahip olan bir bağlantıya bağlanacağında ve mevcut bloğun yeniden bağlanabileceği bir yer olmadığında gerçekleşir. Dragged block bırakıldığında, değiştirilen bloğun bağlantısı kesilir ve sürüklenen blok onun yerine bağlanır.

Varsayılan olarak bunu, değiştirilen bloğa bir solma efekti ekleyerek belirtiriz.

Yerleşik değiştirme önizlemesi

Ekleme

Ekleme iki durumda gerçekleşir. Bu durum, sürüklenen bloktaki bir bağlantı boş bir bağlantıya bağlanacağı zaman ortaya çıkar. Bu durum, sürüklenen bloktaki bir bağlantının zaten bir bloğa sahip olan bir bağlantıya gittiğinde ortaya çıkar. Ancak bu bağlantı, mevcut iki blok arasına yerleştirilebilir. Böylece mevcut bloğun bağlantısı kesilmez.

Varsayılan olarak, ekleme işaretçileri oluşturarak ve bağlanacak bağlantıları vurgulayarak bunu belirtiriz.

Yerleşik ekleme önizlemesi

Özel bir önizleyici oluşturma

Beklemedeki bağlantıları önizlemek için farklı bir görsel kullanmak istiyorsanız özel bir IConnectionPreviewer uygulaması oluşturabilirsiniz.

İnşaat ve bertaraf

IConnectionPreviewer için bir kurucu ve bir bertaraf yöntemi uygulamanız gerekir.

Bir blok sürüklenmeye başladığında oluşturucu çağrılır ve sürüklenen blok iletilir. Bloka göre herhangi bir durumu başlatmanız gerekiyorsa bunu kurucuda yapabilirsiniz.

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

dispose yöntemi, bir blok sürükleme işlemi sona erdiğinde çağrılır. IConnectionPreviewer örneğiniz kullanımdan kaldırıldığında herhangi bir durumun referansını kaldırmanız gerekirse bunu burada yapmanız gerekir.

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

Önizlemeyi oluşturma

IConnectionPreviewer'ünüzün, bağlantıları görsel olarak önizleme mantığını uygulaması gerekir.

Değiştirme

Değişiklikleri önizlemek için previewReplacement yöntemini uygulayın.

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

Ekleme

Eklemeleri önizlemek için previewConnection yöntemini uygulayın.

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

Sürüklenen bloğun boş bir girişe mi yoksa bloklar arasına mı bağlandığına bağlı olarak farklı bir önizleme görmek istiyorsanız staticConn'ün şu anda başka bir bağlantıya bağlı olup olmadığını kontrol edebilirsiniz. staticConn şu anda bağlıysa draggedConn, bloklar arasına yerleştiriliyor demektir.

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

CSS önizlemeleri

Bloğa CSS uygulayarak bağlantıları önizleyebilirsiniz. Örneğin, varsayılan değişimde kaydırma, bloğa blocklyReplaceable CSS sınıfı eklenerek etkinleştirilir.

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

Oluşturucu önizlemeleri

Özel önizleme kancaları içeren bir özel oluşturma aracı uygulayarak bağlantıları önizleyebilirsiniz.

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

Önizlemeyi gizleme

IConnectionPreviewer'nizin önizlemeleri gizlemesi gerekir. Bu işlev, sürüklenen blok tüm bağlantıların kapsamı dışına çıktığında çağrılır. Bu nedenle, önizleme gösterilmemelidir. Ayrıca, önizleyiciden hemen önce çağrılır.

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

Kayıt ve kullanım

Son olarak, IConnectionPreviewer oluşturma işlemini tamamladıktan sonra kaydetmeniz gerekir. Bu işlem, oluşturma aracını bir dizeyle ilişkilendirir. Böylece, oluşturma aracını yapılandırma seçeneklerinize iletebilirsiniz. IConnectionPreviewer sınıfını (yani kurucuyu) doğrudan yapılandırma seçeneklerinize de iletebilirsiniz.

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,
  },
};

Kayıt hakkında daha fazla bilgi için Alt sınıfları ekleme başlıklı makaleyi inceleyin.