Serileştirme

Serileştirme, çalışma alanınızın durumunu kaydederek daha sonra çalışma alanına geri yüklenmesini sağlar. Kaydetmek istediğiniz tüm blokların, değişkenlerin veya eklentilerin durumunun serileştirilmesi de buna dahildir. Kaydetmeniz gereken tüm verileri, kolay depolama için metin tabanlı bir biçime dönüştürebilir ve ardından bu verileri daha sonra tamamen işlevsel bir çalışma alanına geri yükleyebilirsiniz.

Blockly, bu veriler için JSON ve XML olmak üzere iki biçim sağlar. Yeni projeler için JSON sistemini kullanmanızı öneririz. XML kullanan eski projelerin de yükseltme yapmasını öneririz. XML sistemi, eski kayıt biçimidir. Kaldırılmaz ancak yeni özellikler eklenmez.

JSON sistemi

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

Kaydetme ve Yükleme

Çalışma alanları

workspaces ad alanındaki save ve load yöntemlerini çağırarak bir çalışma alanının tamamının durumunu seri hale getirebilir veya seri halinden çıkarabilirsiniz.

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ştiricilerle temsil edilir) serileştirir veya seri durumdan çıkarır.

Bağımsız bloklar

blocks ad alanındaki save ve append yöntemlerini çağırarak blokları tek tek seri hale getirebilir veya seri halinden çıkarabilirsiniz.

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

Bağımsız sistemler

İlişkili serileştiriciyi oluşturarak ve save ile load yöntemlerini çağırarak tek tek sistemleri (ör.bloklar, değişkenler, eklentiler vb.) serileştirebilir veya serileştirmeyi geri alabilirsiniz.

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

Nesneleri seri dışına çıkarma sırası

JSON sisteminde, bir kayıtta durumun kopyalanmasını önlemeyi kolaylaştıran açık bir seri dışına çıkarma sırası vardır.

Blockly.serialization.workspaces.load çağrıldığında, serileştiriciler öncelik sırasına göre seri dışına çıkarmak için durum alır. Bu konu Serileştiriciler bölümünde daha ayrıntılı olarak açıklanmaktadır. Amaç, serileştiricilerin diğer sistemlerdeki duruma bağlı olmasına izin vermektir.

Yerleşik serileştiricilerin seri dışına çıkarma sırası:

  1. Değişken modelleri seri dışına çıkarılır.
  2. Prosedürler, seri dışına çıkarılır.
  3. Engellemeler seri durumdan çıkarılır. Bağımsız üst düzey bloklar isteğe bağlı sırayla seri durumdan çıkarılır.
    1. Tür seri durumdan kaldırıldı. Bu, bloğu oluşturur, başlatma yöntemini tetikler ve uzantılarla karışır.
    2. Özellikler seri dışına çıkarılır. Herhangi bir bloğa uygulanabilecek özellikler de buna dahildir. Örneğin: x, y, daraltılmış, devre dışı ve veri.
    3. Ek durum, seri dışına çıkarılır. Daha fazla bilgi için Uzantılar ve Değiştiriciler dokümanını inceleyin.
    4. Blok, (varsa) üst ağına bağlıdır.
    5. Simgeler seri dışı hale getirilir. Bağımsız simgeler isteğe bağlı sırayla seri durumdan çıkarılır.
    6. Alanlar seri dışına çıkarılır. Bağımsız alanlar rastgele bir sırada seri dışına çıkarılır.
    7. Giriş blokları seri durumdan çıkarılır. Buna değer girişlerine ve ifade girişlerine bağlı bloklar dahildir. Bağımsız girişler, rastgele bir sırada seri dışına çıkarılır.
    8. Sonraki bloklar seri durumdan çıkarılır.

Ekstra durum ne zaman kaydedilir?

Bloklar için, siparişte daha üstte bir öğeye bağlı olan daha alt bir öğe varsa bu verileri kopyalayıp ek durumunuza eklemeniz gerekir.

Örneğin, yalnızca bir sonraki blok bağlıysa var olan bir alanınız varsa alanın durumu seri dışı olmadan önce alanın blokunuza eklenmesi için bu sonraki blokla ilgili bilgileri ek durumunuza eklemeniz gerekir.

Ancak yalnızca bir alanın belirli bir değere sahip olması durumunda mevcut olan bir girişiniz varsa ek durumunuza alanla ilgili bilgi eklemeniz gerekmez. Bunun nedeni, alanınızın durumunun önce seri dışına çıkarılması ve bu işlem tamamlandığında girişi bloğunuza ekleyebilmenizdir. Genellikle giriş ekleme işlemi bir doğrulayıcı tarafından tetiklenir.

Durumu kopyalama kuralının, blok yığınları, simgeler, alanlar ve giriş bloklarının keyfi bir sırada seri dışına çıkarılmasını da dikkate aldığını unutmayın. Örneğin, yalnızca başka bir alan A belirli bir değere sahipse var olan bir B alanınız varsa B'nin A'dan önce seri dışına çıkarılması ihtimaline karşı A hakkındaki bilgileri ek durumunuza eklemeniz gerekir.

Blok kancaları

Bloklara nasıl ek serileştirme ekleneceği hakkında bilgi edinmek için Uzantılar ve Değiştiriciler dokümanlarına bakın.

Alan 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ı seri hale getiren ve seri durumdan çıkaran serileştiriciler kaydetmenize olanak tanır. Blockly'nin yerleşik serileştiricileri, bloklar ve değişkenlerle ilgili bilgileri serileştirmekle ilgilenir. Ancak diğer bilgileri serileştirmek istiyorsanız 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 ek 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ştiriciyi kaydettirirken birkaç şey sağlamanız gerekir:

  • Serileştiricinin adı (verilerin de bu ada kaydedildiği ad).
  • Serileştiriciyle ilişkili eklenti/sistemin durumunu save işlevi.
  • Durumu clear işlevi.
  • Durumu load işlevi.
  • Seriden çıkarma sırasını belirlemek için kullanılan priority.

    Serileştiricinizin önceliğini yerleşik önceliklere dayandırabilirsiniz.

Blockly.serialization.workspaces.save çağrıldığında, her seri oluşturucunun save işlevi çağrılır ve verileri nihai 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.

Bir serileştirici tetiklendiğinde iki şey olur:

  1. Sağlanan clear işlevi çağrılır. Bu sayede, daha fazla durum yüklenmeden önce eklentinizin/sisteminizin durumunun temiz olması sağlanır. Örneğin, workspace-comments serileştirici, çalışma alanındaki tüm mevcut 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üne göre serileştirmenize olanak tanır. Bu, Blockly'nin orijinal serileştirme sistemiydi. Artık kullanımdan kaldırıldı. Yani yeni özellikler eklenmeyecek. Bu nedenle, mümkünse JSON sistemini kullanmanızı öneririz.

API'ler

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

Blok kancaları

Bloklara nasıl ek serileştirme ekleneceği hakkında bilgi edinmek için Uzantılar ve Değiştiriciler dokümanlarına bakın.

Alan kancaları

Alanların nasıl serileştirileceği hakkında bilgi edinmek için Özel alanlar dokümanlarına bakın.

JSON ve XML arasında seçim yapma

XML yerine JSON serileştiriciyi kullanmanızı öneririz. JSON sistemi, çalışma alanınızın durumunu bir JavaScript nesnesine serileştirmenize olanak tanır. Bunun avantajları şunlardır:

  1. JSON kolayca sıkıştırılabilir veya başka bir biçime dönüştürülebilir.
  2. JSON, programla çalışmak için kolaydır.
  3. JSON'u genişletmek ve veriler eklemek kolaydır.

Ayrıca XML sistemi artık güncelleme almayacak ve JSON serileştiriciye kıyasla daha az özelliğe sahip. Örneğin, eklediğiniz eklentiler veya özelleştirmeler gibi ek verileri kolayca kaydedip yüklemek için kendi JSON serileştiricinizi kaydedebilirsiniz. Bu, XML sisteminde mümkün değildir.

Daha önce XML serileştirme kullandıysanız yükseltme hakkında bilgi edinmek için taşıma kılavuzuna bakın.