Automatické generování URL parametrů v komponentách

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

Zdravím,
na stránce mám vykreslenou komponentu, v ní je jeden formulář a nějaké další ovládací prvky. Když z komponenty kliknu na tlačítko, pomocí AJAXu se požadavek odešle na vygenerovanou URL. Řeším, jak sestavit tento AJAX požadavek včetně správných parametrů.

Při použití

$.nette.ajax({
  url: {link fillValues, key => "value"},
  data: {
    'evaluationFormControl-region': $("#frm-evaluationFormControl-form-region").val(),
  }
});

je výsledná URL

?evaluationFormControl-key=value&do=evaluationFormControl-fillValues&evaluationFormControl-region=123

Ale toto není moc dobré. Potřeboval bych, aby se název komponenty, tedy „evaluationFormControl“ nějak v AJAXovém požadavku sám vygeneroval. Když totiž použiji jen

$.nette.ajax({
  url: {link fillValues, key => "value"},
  data: {
    'region': $("#frm-evaluationFormControl-form-region").val(),
  }
});

je výsledná URL

?evaluationFormControl-key=value&do=evaluationFormControl-fillValues&region=123

Z tohoto však nejsem schopen získat hodnotu „123“ přes

$this->getParameter("region");

jelikož je to zanořeno v komponentě.

Stručně řečeno – jak v šabloně komponenty získat tu část, kterou Nette přidává jako ID ke všem prvkům formuláře v komponentě? (to už vůbec nemluvím o tom, že v části jQuery, kde získávám data z prvku formuláře, to musím mít také ručně napsáno)

David Matějka
Moderator | 6445
+
0
-

$this->getParameterId('region') ti vrati kompletni nazev parametru vcetne cesty. samotnou cestu ke komponente pak ziskas pres $this->getUniqueId()

CZechBoY
Člen | 3608
+
0
-

Snažíš se udělat ajaxovej formulář s metodou get?
Jinak název parametru fqdn zjistíš takhle:

$control->getParameterId('abcdef');
roman.campula
Člen | 60
+
0
-

Děkuji, vyzkouším. A v latte toho docílím také nebo si to musím předat takto?

$this->template->paramId = $this->getParameterId('region')
CZechBoY
Člen | 3608
+
0
-

Tak vždycky si můžeš předat celou komponentu (nebo použít proměnnou $control)

$this->template->thisControl = $this;
{$thisControl->getParameterId('region')}

Editoval CZechBoY (31. 8. 2016 15:43)