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 durumunu serileştirmek de buna dahildir. Kaydetmeniz gereken tüm verileri kolayca depolamak için metin tabanlı bir biçime dönüştürebilir ve daha sonra bu verileri tamamen işlevsel bir çalışma alanına geri yükleyebilirsiniz.
Blockly bu veriler için iki biçim sunar: JSON ve XML. 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 almaz.
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 ek 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ı olan tüm sistemleri (serileştiriciler tarafından temsil edilir) serileştirir veya seri dışına çı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 serileştirme 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 serileştirme işlemini gerçekleştirecek duruma getirilir. 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ı:
- Değişken modelleri seri dışına çıkarılır.
- Prosedürler, seri dışına çıkarılır.
- Bloklar seri dışına çıkarılır. Bağımsız üst düzey bloklar, rastgele bir sırada seri dışına çıkarılır.
- Tür, seri dışına çıkarıldı. Bu işlem, bloğu oluşturur, init yöntemini tetikler ve uzantıları karıştırır.
- Özellikler seri dışına çıkarılır. Herhangi bir blok için geçerli olabilecek özellikler de buna dahildir. Örneğin: x, y, daraltılmış, devre dışı ve veri.
- Ek durum, seri dışına çıkarılır. Daha fazla bilgi için Değiştiriciler belgelerine bakın.
- Blok, üst öğesine (varsa) bağlıdır.
- Simgeler seri dışı hale getirilir. Bağımsız simgeler, rastgele bir sırada seri dışına çıkarılır.
- Alanlar seri dışına çıkarılır. Bağımsız alanlar rastgele bir sırada seri dışına çıkarılır.
- Giriş blokları seri dışına çıkarılır. Değer girişlerine ve ifade girişlerine bağlı bloklar da buna dahildir. Bireysel girişler, rastgele bir sırada seri dışına çıkarılır.
- Sonraki bloklar seri dışına çıkarılır.
Ne zaman ek durum kaydedilmelidir?
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ıdır. Bu işlem tamamlandığında girişi bloğunuza ekleyebilirsiniz. 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 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.
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, JSON sistemi varsayılan olarak Workspace düzeyindeki yorumları serileştirmez. Bunları seri hale getirmek istiyorsanız 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. Seri dışına çıkarma sırasını belirlemek için kullanılan bir
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 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:
- 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, Workspace'teki tüm mevcut 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üne 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 dokümanlarına bakın.
Blok kancaları
Bloklara nasıl ek serileştirme ekleneceği hakkında bilgi edinmek için 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 ile 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. Bu, aşağıdaki nedenlerden dolayı avantajlıdır:
- JSON'u sıkıştırmak veya başka bir biçime dönüştürmek kolaydır.
- JSON'u programlı olarak kullanmak kolaydır.
- 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 rehberine bakın.