Giriş
Bu doküman, JavaScript’te callback fonksiyonlarının kullanımını ve tema geliştirme sürecinde nasıl uygulanacağını ayrıntılı bir şekilde açıklamaktadır. Callback fonksiyonları, işlemler tamamlandıktan sonra ek işlemler yapılmasını sağlar ve dinamik bir kullanıcı deneyimi oluşturmak için sıkça kullanılır.
Genel Açıklama
Callback fonksiyonları, bir işlemin tamamlanmasının ardından tetiklenen fonksiyonlardır. Tema geliştirme sürecinde, form işlemleri, sepet yönetimi, ürün işlemleri ve daha birçok alanda callback fonksiyonları kullanılarak işlemler sonrası özel davranışlar tanımlanabilir. Bu fonksiyonlar, esneklik ve modülerlik sağlar.
Callback Yapısı
callbacks
nesnesi, farklı kategoriler altında gruplanmış callback fonksiyonlarını saklar. Aşağıda, window['callbacks']
nesnesinin yapısı ve her bir kategorinin içerdiği callback dizileri listelenmiştir.
window['callbacks'] = {
customer: {
login: [], // Giriş işlemi sonrası
sign: [], // Kayıt işlemi sonrası
other: [], // Diğer müşteri işlemleri
subscribe: [], // Abonelik işlemi sonrası
},
cart: {
update: [], // Sepet güncelleme sonrası
updateAll: [], // Tüm sepeti güncelleme sonrası
delete: [], // Sepetten ürün silme sonrası
deleteAll: [], // Sepetin tamamını silme sonrası
load: [], // Sepet yükleme sonrası
add: [], // Sepete ürün ekleme sonrası
error: [], // Sepet işlemlerinde hata sonrası
},
order: {
address: [], // Adres seçimi sonrası
payment: [], // Ödeme işlemi sonrası
paymentMethod: {
change: [], // Ödeme yöntemi değişikliği sonrası
set: [], // Ödeme yöntemi belirleme sonrası
},
approve: [], // Sipariş onayı sonrası
cargoChange: [], // Kargo değişikliği sonrası
},
product: {
quickView: {
open: [], // Hızlı görünüm açıldığında
close: [], // Hızlı görünüm kapandığında
},
favourite: {
add: [], // Ürün favorilere eklendiğinde
remove: [], // Ürün favorilerden kaldırıldığında
},
wishList: {
add: [], // Ürün istek listesine eklendiğinde
remove: [], // Ürün istek listesinden kaldırıldığında
load: [], // İstek listesi yüklendiğinde
},
stockAlarm: [], // Stok uyarısı sonrası
priceAlarm: [], // Fiyat uyarısı sonrası
dynamicLoader: [], // Dinamik ürün yükleyici sonrası
personalizationUpload: [], // Kişiselleştirme yükleme sonrası
click: [], // Ürün tıklama sonrası
},
customerOrder: {
productLoad: [], // Sipariş ürünleri yükleme sonrası
returnLoad: [], // İade yükleme sonrası
return: [], // İade işlemi sonrası
cancel: [] // Sipariş iptali sonrası
}
};
Açıklama:
- Her bir alt kategori (örneğin,
cart
,product
) belirli bir işlevsellik alanını temsil eder. - Her bir dizi (örneğin,
cart.add
), ilgili işlem tamamlandığında çalıştırılacak callback fonksiyonlarını saklar. - Callback fonksiyonları, işlem sonuçlarına bağlı olarak veri (örneğin, sepet bilgileri) alabilir.
Callback Kullanımı
Callback fonksiyonları, belirli bir işlem tamamlandığında çalışacak şekilde tanımlanır. Örneğin, sepete ürün eklendiğinde bir mesaj yazdırmak için cart.add
dizisine bir fonksiyon eklenir.
Örnek: Sepete Ürün Ekleme Callback’i
Sepete ürün eklendiğinde konsola bir mesaj yazdırmak için aşağıdaki kod kullanılabilir:
callbacks.cart.add.push((data) => {
console.log('Sepete eklendi:', data);
});
Açıklama:
callbacks.cart.add
: Sepete ürün ekleme işleminin callback dizisi.data
: İşlem sonrası dönen veri (örneğin, eklenen ürünün bilgileri).- Yukarıdaki kod, sepete ürün eklendiğinde konsola veriyle birlikte bir mesaj yazdırır.
Data-Callback Kullanımı
Bazı HTML elemanlarında data-callback
özniteliği kullanılarak callback fonksiyonları tanımlanabilir. Bu, belirli bir elemanla etkileşim sonrası özel bir fonksiyonun çalışmasını sağlar.
Örnek: HTML’de Data-Callback
Aşağıdaki HTML kodu, bir varyant seçim menüsüne tıklanıldığında variantCallback
fonksiyonunu tetikler:
<div data-toggle="variant-two">
<select data-toggle="variant" data-callback="variantCallback">
<option>...</option>
</select>
</div>
Data-Callback Tanımlama
variantCallback
fonksiyonu, window
nesnesine aşağıdaki gibi tanımlanır:
window['variantCallback'] = function(params) {
console.log(params, 'Varyanta tıklandı');
};
Açıklama:
data-callback="variantCallback"
: Elemanla etkileşim sonrasıvariantCallback
fonksiyonunu çağırır.params
: Tıklama işlemiyle ilgili parametreler (örneğin, seçilen varyantın bilgileri).- Yukarıdaki kod, varyant seçildiğinde konsola parametrelerle birlikte bir mesaj yazdırır.
Callback Tanımlama ve Kullanım İpuçları
- Modülerlik: Callback fonksiyonları, kodun modüler ve yeniden kullanılabilir olmasını sağlar. Her işlem için ayrı callback dizileri tanımlayarak kod karmaşasını önleyin.
- Hata Yönetimi:
cart.error
gibi hata callback’lerini kullanarak işlem hatalarını yönetin. - Dinamiklik:
data-callback
özniteliği ile HTML elemanlarına dinamik davranışlar ekleyin. - Veri Kullanımı: Callback fonksiyonları genellikle işlem sonuçlarını (örneğin,
data
) parametre olarak alır. Bu verileri analiz ederek kullanıcıya özel bildirimler gösterebilirsiniz.
Örnek Senaryolar
Senaryo 1: Ödeme Yöntemi Değişikliği
Ödeme yöntemi değiştirildiğinde bir bildirim göstermek için:
callbacks.order.paymentMethod.change.push((data) => {
notify({
text: `Ödeme yöntemi ${data.method} olarak değiştirildi`,
class: 'success',
duration: 3000
});
});
Senaryo 2: Ürün Favorilere Eklendiğinde
Ürün favorilere eklendiğinde bir modal göstermek için:
callbacks.product.favourite.add.push((data) => {
modal({
id: 'favouriteModal',
title: 'Favorilere Eklendi',
html: `<p>${data.productName} favorilere eklendi!</p>`,
buttons: [{ text: 'Tamam', event: () => modalClose() }]
});
});
Senaryo 3: Dinamik Ürün Yükleyici
Dinamik ürün yükleyici tamamlandığında bir işlevi tetiklemek için:
callbacks.product.dynamicLoader.push((data) => {
console.log('Ürünler yüklendi:', data);
// Örneğin, yeni yüklenen ürünleri DOM'a ekle
});
Sonuç
Callback fonksiyonları, tema geliştirme sürecinde esnek ve dinamik işlevsellik sağlamak için güçlü bir araçtır. callbacks
nesnesi, farklı işlem türleri için düzenli bir yapı sunar ve data-callback
özniteliği ile HTML elemanlarına kolayca entegre edilebilir. Yukarıdaki örnekler ve açıklamalar, callback fonksiyonlarının nasıl tanımlanacağını ve kullanılacağını açıkça göstermektedir.