Dialog a následná invalidace snippetu (rozdílné odkazy na handlery ve snippetu)
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- Skic
- Člen | 18
Mám vytvořené dialogové okno (ajax) a jeho životní cyklus vypadá následovně:
- kliknu na odkaz, který vede
Presenter:action - v Presenteru se pak rozhoduju, pokud odkaz přišel z ajaxu, přidávám si do payloadu informace, abych si zobrazil dialogové okno – pokud ne, zobrazím stránku klasicky
- po zavření dialogového okna přenačítám snippet, který byl na stránce
Řeším následující vzorovou situaci:
- Mám zobrazenou stránku
Role:default, kde je výpis rolí – u každé položky je odkaz na signáldelete!(Tento odkaz vede na adresu.../default?do=delete - Otevírám dialogové okno
Role:editorpro vytvoření nové role – v metoděactionEditor()si nastavuji do payloadu data k otevření formuláře - V dialogu je formulář, který zpracovávám ajaxově
- Při úspěšném zpracování formuláře nastavuji do payloadu data, aby
se mi dialog zavřel a volám invalidaci snippetu s výpisem
rolí
$this->invalidate('list'); - A jelikož jsem invalidoval z akce
editor, vytvoří se mi v seznamu rolí jiné odkazy na handler pro smazání.../editor?do=delete
Tím, že se mi vytvoří jiný odkaz, pak po provedení handleru
handleDelete() se mi provádí metoda actionEditor(),
jelikož nevolám terminate(), protože potřebuji invalidovat
snippet list. (vše podle životního cyklu presenteru).
Vyvoláním této metody zapříčiním, že se mi otevře dialogové okno (viz.
bod 2)
A já bych rád znal váš názor, zda je ideální řešení v tomto
případě volat metodu $this->changeAction('default') po
zpracování formuláře, aby se mi snippet vygeneroval se „správnými“
odkazy?
class RolePresenter extends UI\Presenter {
public function actionEditor() {
if ($this->isAjax() {
$this->payload->dialog = 'show';
}
// priprava editoru
}
public function actionDuplicate() {
$this->view = 'editor';
// priprava editoru pro duplikaci
}
public function renderEditor() {
// ...
}
public function renderDefault() {
// ...
}
public function editorFormSubmit() {
// zpracovani formu
if ($this->isAjax()) {
$this->payload->dialog = 'close';
// that's the question
$this->changeAction('default');
$this->invalidateControl('list');
}
}
}
Editoval Skic (13. 2. 2013 12:28)