Serileştirme

Serileştirme, çalışma alanınızın durumunu kaydeder. Böylece daha sonra çalışma alanına geri yükleyebilirsiniz. Bu, kaydetmek istediğiniz tüm engellemelerin, değişkenlerin veya eklentilerin durumunu serileştirmeyi içerir. Kaydetmeniz gereken tüm verileri, kolay depolama için metin tabanlı bir biçime dönüştürebilir ve daha sonra bu verileri tekrar tamamen işlevsel bir çalışma alanına yükleyebilirsiniz.

Blockly, bu veriler için iki biçim sağlar: JSON ve XML. Yeni projeler için JSON sistemini kullanmanızı ve eski projelerin yükseltilmesi için XML kullanmasını öneririz. XML sistemi, eski kayıt biçimidir. Kaldırılmayacak ancak yeni özellikleri almayacak.

JSON sistemi

JSON serileştirme sistemi birden fazla serileştiriciden oluşur. Bloklar ve değişkenler için yerleşik serileştiriciler vardır. Ayrıca, başka serileştiriciler de kaydedebilirsiniz. Her serileştirici, belirli bir eklentinin veya sistemin durumunu serileştirmek ve seri durumdan çıkarmaktan sorumludur.

Kaydediliyor ve Yükleniyor

Çalışma alanları

workspaces ad alanında save ve load yöntemlerini çağırarak bir çalışma alanının tamamını serileştirebilir veya seri durumdan geçirebilirsiniz.

const state = Blockly.serialization.workspaces.save(myWorkspace);
Blockly.serialization.workspaces.load(state, myWorkspace);

Bu çağrılar, çalışma alanına kayıtlı tüm bağımsız sistemleri (serileştiriciler tarafından temsil edilir) serileştirir veya seri durumdan çıkarır.

Bağımsız bloklar

blocks ad alanında save ve append yöntemlerini çağırarak ayrı blokları serileştirebilir veya seri durumdan geçirebilirsiniz.

const blockJson = Blockly.serialization.blocks.save(myBlock);
const duplicateBlock =
    Blockly.serialization.blocks.append(blockJson, myWorkspace);

Bağımsız sistemler

İlişkili serileştirici oluşturup save ve load yöntemlerini çağırarak sistemleri (ör.bloklar, değişkenler, eklentiler vb.) serileştirebilir veya seri durumdan çıkarabilirsiniz.

// Saves only the variables information for the workspace.
const serializer = new Blockly.serialization.variables.VariableSerializer();
const state = serializer.save(myWorkspace);
serializer.load(state, myWorkspace);

Seri durumdan çıkarma sırası

JSON sisteminin açık bir seri kaldırma sırası vardır. Bu da kayıt sırasında durumun yinelenmesinin önlenmesini kolaylaştırır.

Blockly.serialization.workspaces.load çağrıldığında, serileştiricilere öncelik sırasına göre seri durumdan çıkarılacak durum verilir. Bu, Serileştiriciler bölümünde daha ayrıntılı bir şekilde açıklanmaktadır. Serileştiricilerin amacı, diğer sistemlerdeki duruma bağlı olmasını sağlamaktır.

Yerleşik serileştiricilerin seri durumdan çıkarılması için gereken sıra şu şekildedir:

  1. Değişkenler seri durumdan çıkartılır.
  2. Bloklar seri durumdan çıkartılır. Bağımsız yığınlar/üst düzey bloklar, rastgele bir sırada seri durumdan çıkarılır.
    1. Tür, seri durumdan çıkartıldı. Bu, engellemenin başlatma yöntemini, uzantıların mikslerini vb. tetikler.
    2. Özellikler seri durumdan çıkartılır. Bu, herhangi bir bloka uygulanabilecek özellikleri içerir. Örneğin: x, y, daraltılmış, devre dışı, veriler vb.
    3. Ekstra durum, seri durumdan çıkartıldı. Daha fazla bilgi için Uzantılar ve Mutatörler belgelerine bakın.
    4. Engelleme, üst kuruluşuna (varsa) bağlıdır.
    5. Simgeler seri durumdan çıkarılır. Bağımsız simgeler rastgele bir sırada seri durumdan çıkarılır.
    6. Alanlar seri durumdan çıkarılır. Bağımsız alanlar rastgele bir sırada seri durumdan çıkarılır.
    7. Giriş blokları seri durumdan çıkarılır. Değer girişlerine ve ifade girişlerine bağlı bloklar da buna dahildir. Bağımsız girişler rastgele bir sırada seri durumdan çıkarılır.
    8. Sonraki bloklar seri durumdan çıkarılır.

Ekstra durum ne zaman kaydedilir?

Bloklarda, sırada daha yüksek bir şeye bağlı olan daha düşük bir sıranız varsa bu verileri kopyalamanız ve ekstra durumunuza eklemeniz gerekir.

Örneğin, yalnızca sonraki blok bağlı olduğunda mevcut olan bir alanınız varsa bu alanın durumu seri durumdan çıkarılmadan önce blokunuza eklenebilmesi için ekstra durumunuza o sonraki blokla ilgili bilgiyi eklemeniz gerekir.

Ancak yalnızca bir alanın belirli bir değeri varsa mevcut bir girişiniz varsa alanla ilgili bilgileri ekstra durumunuza eklemeniz gerekmez. Bunun nedeni, alanınızın durumunun önce seri durumdan çıkarılacak olmasıdır. Böylece, girişi blokunuza ekleyebilirsiniz. Girişin eklenmesi genellikle bir validator tarafından tetiklenir.

Durumu çoğaltma kuralının, engelleme yığınlarının, simgelerin, alanların ve giriş bloklarının rastgele bir sırayla seri durumdan çıkarıldığını da dikkate alması gerektiğini unutmayın. Örneğin, yalnızca başka bir A alanının belirli bir değeri olduğunda mevcut olan bir B alanınız varsa, B'nin A'dan önce seri durumdan çıkarılması halinde ek durumunuza A ile ilgili bilgi eklemeniz gerekir.

Blok kancaları

Bloklara ekstra serileştirme ekleme hakkında bilgi için Uzantılar ve Mutatörler belgelerine bakın.

Saha kancaları

Alanların nasıl serileştirileceği hakkında bilgi için Özel alanlar belgelerine bakın.

Serileştirici kancaları

JSON sistemi, bazı durumları serileştiren ve seri durumdan çıkartan serileştiricileri kaydetmenize olanak tanır. Blockly'nin yerleşik serileştiricileri, bloklar ve değişkenlerle ilgili bilgilerin serileştirilmesiyle ilgilenir, ancak diğer bilgileri seri hale getirmek isterseniz kendi serileştiricinizi eklemeniz gerekir. Örneğin, çalışma alanı düzeyindeki yorumlar JSON sistemi tarafından varsayılan olarak serileştirilmez. Bunları seri hale getirmek isterseniz başka bir serileştirici kaydetmeniz gerekir.

Ek serileştiriciler genellikle bir eklentinin durumunu serileştirmek ve seri durumdan çıkarmak için kullanılır.

Blockly.serialization.registry.register(
    'workspace-comments',  // Name
    {
      save: saveFn,      // Save function
      load: loadFn,      // Load function
      clear: clearFn,    // Clear function
      priority: 10,      // Priority
    });

Bir serileştirici kaydederken birkaç şeyi sağlamanız gerekir:

  • Serileştiricinin adı ve verilerin de kaydedildiği ad.
  • Seri oluşturucuyla ilişkilendirilen eklentinin/sistemin durumunu save yapan bir işlev.
  • Durumu clear yapan bir işlev.
  • Durumu load yapan bir işlev.
  • Seri durumdan çıkarma sırasını belirlemek için kullanılan priority.

    Serileştiricinizin önceliğini yerleşik önceliklere göre belirleyebilirsiniz

Blockly.serialization.workspaces.save çağrıldığında, her serileştiricinin save işlevi çağrılır ve verileri son JSON çıkışına eklenir:

{
  "blocks": { ... },
  "workspaceComments": [ // Provided by workspace-comments serializer
    {
      "x": 239,
      "y": 31,
      "text": "Add 2 + 2"
    },
    // etc...
  ]
}

Blockly.serialization.workspaces.load çağrıldığında, her serileştirici öncelik sırasına göre tetiklenir. Daha pozitif öncelik değerlerine sahip serileştiriciler, daha az pozitif öncelik değerlerine sahip serileştiricilerden önce tetiklenir.

Serileştirici tetiklendiğinde iki şey olur:

  1. Sağlanan clear işlevi çağrılır. Bu, daha fazla durum yüklenmeden önce eklentinizin/sisteminizin durumunun temiz olmasını sağlar. Örneğin,workspace-comments serileştirici, çalışma alanındaki mevcut tüm yorumları kaldırır.
  2. Sağlanan load işlevi çağrılır.

XML sistemi

XML sistemi, çalışma alanınızı bir XML düğümünde serileştirmenizi sağlar. Bu, Blockly'nin orijinal serileştirme sistemiydi. Şu anda buz kutusu içine yerleştirilmiş, yani yeni özellikleri almayacak. Bu nedenle, mümkünse JSON sistemini kullanmanızı öneririz.

API'ler

XML sisteminin API'leri hakkında bilgi için lütfen referans belgelerine bakın.

Blok kancaları

Bloklara ekstra serileştirme ekleme hakkında bilgi için Uzantılar ve Mutatörler belgelerine bakın.

Saha kancaları

Alanların nasıl serileştirileceği hakkında bilgi için Özel alanlar belgelerine bakın.

JSON ve XML arasında seçim yapma

XML üzerinden JSON serileştiriciyi kullanmanızı öneririz. JSON sistemi, çalışma alanınızın durumunu bir JavaScript nesnesine serileştirmenize olanak tanır. Bu avantajlıdır çünkü:

  1. JSON kolayca sıkıştırılabilir veya başka bir biçime dönüştürülebilir.
  2. JSON, programatik olarak kolayca kullanılabilir.
  3. JSON verilerini genişletmek ve eklemek kolaydır.

Ayrıca, XML sistemi artık güncellemeleri almayacak ve JSON serileştirici ile karşılaştırıldığında zaten özellik barındırmamaktadır. Örneğin, eklediğiniz eklentiler veya özelleştirmelerle ilgili veriler gibi ek verileri kolayca kaydetmek ve yüklemek için kendi JSON serileştiricinizi kaydedebilirsiniz. Bu, XML sisteminde mümkün değildir.

Daha önce XML serileştirmesini kullandıysanız yeni sürüme nasıl geçeceğinizle ilgili bilgi için taşıma rehberine bakın.