Bir kayıt oluşturulduğunda, güncellendiğinde, devre dışı bırakıldığında, yeniden etkinleştirildiğinde veya bir aksiyonla değiştiğinde, onu gösteren her ekran kullanıcı başka yere gidip dönmeden tazelenmelidir. Web uygulaması bunu webapp/js/data-bus.js içinde tanımlanan tek bir sinyalle, cluster:data-changed ile çözer. Bu sayfa sinyali kimin yaydığını, kimin dinlediğini, arka planda tutulan ekranların nasıl yetiştiğini ve önbelleğe alınmış verinin nasıl düşürüldüğünü açıklar. Masaüstü karşılığı masaüstü bölümünde anlatılan sinyal veriyoludur.
Kısaca¶
- Metadata güdümlü değişiklikler için tek yayıcı
GenApisınıfıdır: değiştiren her yöntem_changedçağırır; bu, modülün önbelleğe alınmış listelerini düşürür veemitDataChangedçağırır (webapp/js/gen-api.js:44-51). emitDataChangedbir oturum sayacını artırır ve{module, entityType, id, kind, seq}ilecluster:data-changedyayar (webapp/js/data-bus.js:11-22).watchData(el, cb)yalnız öğe ekrandayken geri çağırır ve öğe yok edildiğinde aboneliği kaldırır (webapp/js/data-bus.js:33-44).- Arka planda canlı tutulan bir ekran döndüğünde sayacı karşılaştırır ve arada veri değiştiyse yeniden çizer (
webapp/js/home.js:2283-2326).
Nasıl çalışır¶
Sinyal yolu¶
Akış şeması bir değişiklikten tazelenen ekranlara giden yolu gösterir.
flowchart LR call["GenApi create, update, remove, bulkDelete, reactivate, action"] --> changed["_changed"] changed --> inval["invalidateModule"] changed --> emit["emitDataChanged"] emit --> event["cluster:data-changed"] event --> list["makeGenList watchData"] event --> meta["meta.js katman tazeleme"] event --> bundle["kapılı paket watchData"] emit --> seq["dataSeq sayacı"] seq --> resume["dönüşte unstashInto"] seq --> homeseq["refreshHomeIfStale"]
Sözle:
GenApiüzerinden bir değişiklik (create,update,remove,bulkDelete,reactivateveyaGETolmayan biraction)_changed(kind, id)çağırır (webapp/js/gen-api.js:98-174)._changed, o modülün önbelleğe alınmış her seçenek listesini ve etiketini sileninvalidateModule(module)çağırır (webapp/js/gen-api.js:300-311). Yorum, hangi listenin değiştiğini tahmin etmek yerine modülün tüm girdilerinin düşürüldüğünü belirtir._changedardından modül, varlık türü, kimlik ve türleemitDataChangedçağırır (webapp/js/gen-api.js:48-51). Türcreate,update,deactivate,activateveyaactiondeğerlerinden biridir.- Ekrandaki bir liste, değişiklik kendi modülündeyse ve son yüklemesi değişiklikten eskiyse yeniden yükler (
webapp/js/gen-list.js:368-372,webapp/js/gen-list.js:411). - Varlık türü
tenant_field_definitionveyatenant_field_settingolduğundameta.jskiracı alan katmanını yeniden uygular (webapp/js/meta.js:252-256). - Kapılı paketler
emitDataChanged,watchDatavedataSeqişlevlerini platform bağlamı üzerinden alır; böylece kendi değişikliklerini duyurabilir ve başkalarınınkini dinleyebilirler (webapp/js/custom-widgets.js:85-90). Intranet paketiwatchDataile dinler (gated_apps/intranet/app.js:1175); analitik, üretim ve proje paketleri önbelleklerini geçersiz kılmak içindataSeqkullanır (gated_apps/analytics/app.js:3944,gated_apps/production/app.js:1065,gated_apps/projects/app.js:696).
Arka plandaki ekranlar¶
Ekranda olmayan bir ekran hemen tazelenmez:
watchDataöğe kopukken geri çağırmayı atlar. Öğenin kökü bir belge parçasıysa ekran canlı tutulur ve dinleyici kalır; değilse dinleyici kendini kaldırır (webapp/js/data-bus.js:33-44).- Bir uygulama arka plana alındığında
stashActivedataSeq()değerini kaydeder (webapp/js/home.js:2287-2289). - Döndüğünde
unstashInto, sayaç değiştiyse, uzaktayken bir boyama düştüyse veya geç bir boyama boş içerik alanına düştüyse üst görünümü yeniden çizer. Açık bir form varken yeniden çizmez; böylece yazılan girdi kaybolmaz (webapp/js/home.js:2293-2326). - Ana ekran her çizimde sayacı kaydeder ve kullanıcı bir değişiklikten sonra ona döndüğünde yeniden çizer (
webapp/js/home.js:935-937,webapp/js/home.js:2884-2900).
Düşen boyamalar¶
Ekranı arka plandayken biten eşzamansız bir boyama aksi hâlde kaybolurdu. Boyayanlar el.isConnected sınamak yerine canPaint(el) çağırır; saklanan bir ekranda yapılan çağrı saklanan kökü işaretler ve ekran döndüğünde paintDroppedIn(root) bu işareti bildirir ve temizler (webapp/js/data-bus.js:46-74). Modül uygulamaları, listeler, kartlar, ağaçlar ve ayar ekranları canPaint kullanır (webapp/js/module-app.js:82, webapp/js/gen-list.js:456, webapp/js/gen-detail.js:52, webapp/js/gen-tree.js:53, webapp/js/gen-settings.js:34).
Bir değişiklikten sonra form taslakları¶
Kaydedilen bir form taslağını siler (webapp/js/gen-form.js:1362). Arka planda açık bırakılan bir form girdisini korur, çünkü unstashInto form içeren bir ekranı yeniden çizmez (webapp/js/home.js:2324). Bkz. genel form.
Sıfırlama¶
Çıkış sayacı sıfırlar (webapp/js/data-bus.js:76-79) ve seçenek listesi ile etiket önbelleklerini temizler (webapp/js/gen-api.js:360-365).
Neden böyle kurulu¶
data-bus.jsbaşlık yorumu kuralı belirtir: hiçbir ekran başka bir ekranı doğrudan çağırmaz; değişikliği yapan tek yer sinyali yayar ve görünür yüzeyler dinler. Bunu modüller arası doğrudan çağrı yasağının web karşılığı olarak adlandırır (webapp/js/data-bus.js:1-9).webapp/js/data-bus.js:46-56içindeki yorum, ekran arka plandayken bir yükleme bittiği için bir ekranın yükleme yer tutucusunda kaldığı bir durumu kaydeder.- Projenin yazılı mühendislik kuralları modüller arası doğrudan iletişimi yasaklar ve hepsini sunucuda EventBus, masaüstünde sinyal veriyolu üzerinden yönlendirir. Bkz. yalnız EventBus ile modüller arası iletişim.
Kurallar ve sınırlar¶
- Salt okunur
GETaksiyonları sinyal yaymaz (webapp/js/gen-api.js:170). - Tarayıcı testleri:
web-client/_e2e_data_refresh.mjs,web-client/_e2e_keepalive_paint.mjs,web-client/_e2e_form_draft.mjs.
Diğer parçalarla etkileşim¶
- Sunucu her değişikliği bu sinyalden bağımsız olarak değişiklik geçmişine kaydeder; bkz. değişiklik geçmişi.
- Çalışan uygulamalar ve arka planda canlı tutma modül uygulamaları ve uygulama kapsamı sayfasında anlatılır.
Sınırlar ve açık noktalar¶
GenApidışında doğrudanapiFetchile yapılan değişiklikler, çağıran yaymadıkça sinyal yaymaz. Örneklerwebapp/js/record-docs.js:168-176vewebapp/js/record-docs.js:272içindeki belge ekleme ve silme ilewebapp/js/gen-detail.js:619-775içindeki rol ve izin listeleridir.webapp/js/içindeemitDataChangedaraması yalnızdata-bus.jsvegen-api.jsdosyalarını bulur.- Sinyal tek bir tarayıcı penceresine yereldir. Başka bir sekmede veya başka bir kullanıcının yaptığı değişiklik yalnız sonraki yüklemede görülür. Koddan belirlenemedi: veri değişiklikleri için herhangi bir sunucu itme kanalı.
webapp/js/changed.jsbu sinyalin parçası değil, değişiklik geçmişi üzerindeki Değiştirilen Kayıtlar ekranıdır. Genel ağaç ve ayar ekranları sayfasında anlatılır.
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| data-changed signal | cluster:data-changed |
Bir değişikliği dinleyen her ekrana duyuran belge olayı. | veri değişti sinyali | webapp/js/data-bus.js:12 |
| data sequence | dataSeq |
Bayat ekranları algılamak için kullanılan oturumluk değişiklik sayacı. | veri sürümü | webapp/js/data-bus.js:16 |
| dropped paint | canPaint |
Ekranı arka plandayken biten ve yeniden yapılması gereken bir boyama. | düşen boyama | webapp/js/data-bus.js:61 |
İlgili sayfalar¶
- Web uygulaması platformu
- Açılış, oturum ve API çağrıları
- Modül uygulamaları ve uygulama kapsamı
- Genel liste
- Olay veriyolu
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.