Neprijemnost s nette.ajax.js, signalem a komponentou

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Azim
Člen | 41
+
0
-

Zdravim!
Pro ajaxizaci pouzivam skvele rozsireni https://componette.org/search/?… a narazil jsem asi ne na chybu, ale na vec, ktera mi zneprijemnuje zivot.
Mam komponentu, v niz chci ajaxem zpracovavat signal, na coz bezne pouzivam tuto konstrukci:

$.nette.ajax({
	    type: 'GET',
	    url: {link swipe!},
	    data: {
		cisloKarty: parsedSwipe.CardNumber
	    }
	});

toto vsak nefungovalo, parametr se do komponenty nepredal, ale v presenteru byl. chyba byla ve spatnem pojmenovani parametru – takto to uz funguje (name je nazev komponenty):

$.nette.ajax({
	    type: 'GET',
	    url: {link swipe!},
	    data: {
		"{!$name}-cisloKarty": parsedSwipe.CardNumber
	    }
	});

Otazka na vas, zkusenejsi uzivatele nette a nette.ajax.js – jak podobne situaci resite vy? nezda se mi nejlepsi zpusob si pamatovat, ze v komponente musim k nazvu parametru doplnit rucne nazev komponenty.
Diky za tipy

Majkl578
Moderator | 1364
+
0
-

Jelikož jde o komponentu, nemůžeš tam hardcodovat název, protože nevíš, jak se bude jmenovat a ani v jaké úrovni hiearchie bude. Nutno tedy použít něco takového:

var data = {};
data[{$control->getParameterId('cisloKarty')] = parsedSwipe.CardNumber;
// nebo
data[{$control->uniqueId} + '-cisloKarty'] = parsedSwipe.CardNumber;

$.nette.ajax({
        type: 'GET',
        url: {link swipe!},
        data: data
});

V výše uvedených dvou způsobů používám ten druhý (méně psaní), ačkoliv ten první je správnější.

Problém s nette.ajax.js nijak nesouvisí, stejný problém bys musel řešit ať bys použil jakoukoliv knihovnu.

Azim
Člen | 41
+
0
-

name si predavam do sablony z komponenty takto

$this->template->name = $this->getName();

takze to by melo byt v cajku, ne?

Majkl578
Moderator | 1364
+
0
-

Nikoliv, to bude fungovat správně pouze pokud komponenta bude v první úrovni zanoření.

Azim
Člen | 41
+
0
-

upraveno, diky