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:
- Değişkenler seri durumdan çıkartılır.
- Bloklar seri durumdan çıkartılır. Bağımsız yığınlar/üst düzey bloklar, rastgele bir sırada seri durumdan çıkarılır.
- Tür, seri durumdan çıkartıldı. Bu, engellemenin başlatma yöntemini, uzantıların mikslerini vb. tetikler.
- Özellikler seri durumdan çıkartılır. Bu, herhangi bir bloka uygulanabilecek özellikleri içerir. Örneğin: x, y, daraltılmış, devre dışı, veriler vb.
- Ekstra durum, seri durumdan çıkartıldı. Daha fazla bilgi için Uzantılar ve Mutatörler belgelerine bakın.
- Engelleme, üst kuruluşuna (varsa) bağlıdır.
- Simgeler seri durumdan çıkarılır. Bağımsız simgeler rastgele bir sırada seri durumdan çıkarılır.
- Alanlar seri durumdan çıkarılır. Bağımsız alanlar rastgele bir sırada seri durumdan çıkarılır.
- 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.
- 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:
- 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. - 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ü:
- JSON kolayca sıkıştırılabilir veya başka bir biçime dönüştürülebilir.
- JSON, programatik olarak kolayca kullanılabilir.
- 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.