Prúběh presenteru a zpracování metody redrawControl

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

Zdravím, chtěl bych se zeptat, jak přesně funguje presenter a zvláště jeho překreslování ajaxem.
Vím že presenter nejdříve volá action, handle, beforeRender, render.
Co se ale stane pokud použiji v handle metodě $this->redrawControl(‚snippet‘) ?
tím že kliknu na tlačítko které takový handle zavolá se stane to že se provede všechno plus to co je uvnitř toho handlu?

Nějak se zamotávám, zkrátka mi jde o jednu věc, vysvětlím na konktrétním příkladu.

Mám tabulku se záznamy a záznamy se dají ajaxově smazat.

Záznamy se načítají v action
<?php $this->records = $this->recordsModel->getAll(); // selection ?>

Poté se v render metodě předávají do template.

V handle metodě u smazání je:

<?php
$this-recordsModel->delete($id);
$this->redrawControl('recordsSnippet');
?>

Počítal jsem s tím, že když se zavolá redrawControl() tak se zavolá znovu ta action, a tudíž záznamů bude o jeden méně. Ale záznam mi tam zůstane dokud nezavolám redraw znovu, nebo nerefreshnu stráknu.

Netuší někdo čím by to mohlo být?

David Matějka
Moderator | 6445
+
0
-

ne, action se znovu nezavola, takze muzes treba to nacitani zaznamu presunout do render metody.

redrawControl pouze jen oznaci konkretni snippet, ze se ma pri vykreslovani sablony vykreslit a vratit v payloadu, nijak to neovlivni cyklus presenteru.

Fooly
Člen | 26
+
0
-

Díky za odpověď, těď už chápu kde je chyba, $this->records bych měl načítat až v render metodě protože se nejdříve musí provést samotné smazání v handle.
Dovolte mi tedy ještě jednu otázku se kterou se peru.
Mám komponentu na mazání fotek, která má checkboxlist, jehož items jsou z databáze vytažené fotky.
Načítají se přímo v metodě createComponentRemovePhotosForm().
Při submitu se zaškrtnuté smažou, a měl by se překreslit formulář. V tomto případě by mě tedy zajímalo, jelikož onSuccess je také vlastně handle metoda, proč když se fotky smažou, tak jsou pořád obsažené v tom formuláři.
Co mě napadlo, že je to z důvodu validace, že formulář po submitu zůstane stejný jako byl aby se zachovala validace. Zkoušel jsem to i bez ajaxu, a stejný výsledek, dokud jsem neobnovil stránku, tak tam smazaná fotka zůstala.

David Matějka
Moderator | 6445
+
0
-

Ano, aby se formular mohl zpracovat, ta se pred tim musi znovu vytvorit – aby nette vedelo jake fieldy tam jsou, jaka jsou validacni pravidla, onSuccess callback. Budes v tom onSuccess upravit seznam items

Fooly
Člen | 26
+
0
-

A to se da udelat jak?

David Matějka
Moderator | 6445
+
0
-

$form['mujCheckboxlist']->setItems($items)

Fooly
Člen | 26
+
0
-

Aha, tohle pouzivam casto, jen jsem nevedel ze se to da pouzit primo v onSuccess metode :) dekuji za odpovedi!