Po vybrání položky ze selectboxu předej data z Ajax do presenteru

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

Zdravím všechny,

nějakou chvíli řeším, aby se po vybrání položky ze selectboxu poslaly data pomocí Ajaxu do presenteru.
Presenter data zpracuje a předá do databáze, která provede řazení položek.

Problém mám v tom, že nedokážu odchytnout poslaná data z Ajaxu.
Nejspíš problém, že se překreslí jinou metodou, takže se ty data ztratí.

Aplikaci mám nahranou na githabu:
https://github.com/…public_html/

V šabloně campaign/default.latte mám script:
https://github.com/…efault.latte

<script>
    $('#frm-sortForm').change(function () {
        $.nette.ajax({
            url: {link default},
            data: {
                'sortData': {
                    'name': $('#frm-sortForm-name').val(),
                    'cost': $('#frm-sortForm-cost').val()
                }
            }
        });
    });
</script>

V presenteru campaignPresenter:
https://github.com/…resenter.php
 – Formulář:

<?php
// return App\Forms\SortFormFactory
protected function createComponentSortForm()
{
	$sorting = ['ASC' => 'Vzestupně', 'DESC' => 'Sestupně'];
	$this->sortFactory->setSortData($sorting);
	return $this->sortFactory->create();
}
?>

– Zpracování:
 – – Zkoušel jsem pomocí handleSort, ale překreslí to metoda actionDefault

<?php
public function handleSort(array $sortData)
{
		// TODO: prázdná data
		$this->ajaxData = $this->getHttpRequest()->getRawBody();
		$this->ajaxData = $sortData;
		if ($this->isAjax())
		{
			// překreslení objektu
			$this->redrawControl('campaignList');
		}
}
?>

– – použití metody actionDefault, taky se překreslí, data ztracena

<?php
public function actionDefault($customerId, array $sortData)
	{
		parent::loadState($this->getParameters());
		$this['breadcrumb']->addLink('Účty', $this->link('Account:'));
		$this['breadcrumb']->addLink('Kampaně');
		// TODO: prazdna data
		$this->ajaxData = $this->getHttpRequest()->getRawBody();
		$this->ajaxData = $sortData;
	}
?>

Prosím o jakoukoliv radu, která mě dostane z tohoto problému.

Soubory, na které se tento problém vztahuje:
Presenter – https://github.com/…resenter.php
Šablona – https://github.com/…efault.latte
Továrnička – https://github.com/…mFactory.php

Editoval frantisek.kasa (11. 5. 2017 15:10)

GEpic
Člen | 566
+
0
-

V tom JS nedávej link default ale přímo link na signál handleSort {link sort!}.

Taktéž změň v signálu název parametru, aby nekolidoval s actionDefault parametrem (sortData)

Zkoušel jsem pomocí handleSort, ale překreslí to metoda actionDefault

Action se provádí dřív než Handle

Editoval GEpic (11. 5. 2017 20:47)

frantisek.kasa
Člen | 7
+
0
-

Zkoušel jsem změnit parametry v metodách i použít signál handleSort() a je to stejné, jako zde (obrázek) https://github.com/…ort-ajax.PNG. Ajax předá do url vybraná data, ale pak ji překreslí znovu ta stejná metoda.