Naja – Registrace rozšíření

kolibla
Člen | 25
+
0
-

Ahojky,

jakmile jsem odmazala nette.ajax.js knihovnu, začíná to zlobit na $.nette.ext:

$.nette.ext('bs-modal', {
	init: function () {
		this.ext('snippets', true).after(function ($el) {
			if (!$el.is('.modal')) {
				return;
			}
			$el.modal('show');
		})
	}
});

Je možné tuto konstrukci nějak analogicky nahradit? Hlavně mě zajímá, jak např. na modální okno.

Děkuji.

Editoval kolibla (28. 3. 2021 23:59)

jiri.pudil
Nette Blogger | 1029
+
+2
-

Ahoj, Naja má pro rozšíření dost obdobný mechanismus: rozšíření musí implementovat metodu initialize(naja), ve které by mělo navěsit listenery na události, na něž chce nějak reagovat. Tvůj příklad výše by mohl vypadat přibližně nějak takhle:

const modalExtension = {
    initialize(naja) {
        naja.snippetHandler.addEventListener('afterUpdate', (event) => {
            const {snippet} = event.detail;
            if (snippet.classList.contains('modal')) {
                $(snippet).modal('show');
            }
        });
    }
}

naja.registerExtension(modalExtension);
kolibla
Člen | 25
+
0
-

Ahoj Jirko,

moc děkuji za ukázku, to by mohlo být přesně to, co očekávám. Vyzkouším. :-)

Jinak ještě jedna otázka – používáme ublaboo datagrid, ale nějak se nám ho nedaří plnohodnotně rozchodit s Najou. To znamená, semtam nějaká červenka v konzoli (není teď důležité specifikovat), ale pracuje se teď na nějaké verzi, ať už například v datagridu, který by byl schopen pracovat modulově, nevíš? :-)

jiri.pudil
Nette Blogger | 1029
+
0
-

Bohužel o tom nic nevím. Nejsi první, kdo na to narazil, v lednu jsem k tomu zakládal issue, aby bylo kde sledovat progres, ale nikdo se do toho zjevně zatím nepustil.

teekey99
Člen | 45
+
0
-

Problém s najou v rámci ublaboo gridu je ten, že grid extensions fungují jen jako takový naja-friendly wrapper původních nette.ajax.js extensions. Pro správnou funčknost assety gridu potřebují, aby naja byla definovaná globálně ve window objectu, ještě než načteš assety samotné. Proto je nutný např. přes ProvidePlugin ve webpack configu nabindovat naja jako globální proměnnou, nebo ji lze setnout manuálně v entry pointu před načtením grid assetů.

Něco jako:

import naja from 'naja';
window.naja = naja;
import 'ublaboo-datagrid/assets/datagrid';
naja.registerExtension(MyExtension);
document.addEventListener('DOMContentLoaded', () => naja.initialize());

Ani jedno řešení není ideální a už vůbec ne hezký, ale bohužel lepší aktuálně neexistuje.

Co se přepisu assetů gridu týče, já osobně už jsem se do toho chtěl několikrát pustit, a to včetně podpory TS, ale narazil jsem na fůru problémů, na jejichž řešení jsem bohužel neměl zatím kapacitu. Je to bohužel větší výzva, než jsem původně čekal…

Editoval teekey99 (26. 4. 2021 17:01)