Naja – Registrace rozšíření
- kolibla
- Člen | 25
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
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
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
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
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)