Ako predavat parametre do komponenty po odoslani formularu (filter)
- MarekR
- Člen | 17
Zdravim. Viem, ze na tuto temu tu uz nejake vlakna su, ale dost stare. Potreboval by som poradit ohladom komponent a dat ktore sa do nich dostavaju.
Takze mam filter (formular) a komponentu (js kniznica kendoui pre vykreslenie tabulky).
Teraz ku komponente v prezenteri mam:
protected function createComponentConsuptionHistoryListControl()
{
return new DataGridControl();
}
v latte:
{control consuptionHistoryListControl}
dalej mam triedu DataGridControl.php v ktorej je __construct ktory ma parametre fields a data. (tuto triedu by som uz editovat nechcel pretoze na projekte maka viac ludi a uz to pouzivaju tak ako je)
Moja otazka znie, ako po odoslani formularu (form success) dostanem data s filtra do komponenty?
Editoval MarekR (18. 5. 2016 15:39)
- Barvoj
- Člen | 60
Osobně bych to dělal cca takto:
Filtrovací formulář jako komponenta s callbackem kterému se předají hodnoty z formuláře
use Nette\Application\UI\Control;
use Nette\Application\UI\Form;
/**
* @method onSuccess(array $filterValues)
*/
class FilterForm extends Control
{
public $onSuccess = [];
public function createComponentForm()
{
$form = new Form();
$form->addText('name', 'Name');
$form->onSuccess[] = function (Form $form) {
$this->onSuccess($form->getValues($asArray = true)); // volání callbacku
}
return $form;
}
}
A dále presenter, který si uloží filtrovací hodnoty a při vytvoření gridu se použijí
use Nette\Application\UI\Presenter;
class GridPresenter extends Presenter
{
protected $filterValues = [];
public function createComponentFilterForm()
{
$form = $filterFormFactory->create();
$fomr->onSuccess[] = function($filterValues) {
$this->filterValues = $filterValues; // Uložení hodnot z filtrovacího formuláře
}
return $form;
}
public function createComponentSomeGrid()
{
$data = $this->repository->findBy($this->filterValues); // záskání dat z DB
return new Grid($data);
}
}
Editoval Barvoj (18. 5. 2016 16:07)