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
+
0
-

Mám vytvořené dialogové okno (ajax) a jeho životní cyklus vypadá následovně:

  1. kliknu na odkaz, který vede Presenter:action
  2. 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
  3. po zavření dialogového okna přenačítám snippet, který byl na stránce

Řeším následující vzorovou situaci:

  1. Mám zobrazenou stránku Role:default, kde je výpis rolí – u každé položky je odkaz na signál delete! (Tento odkaz vede na adresu .../default?do=delete
  2. Otevírám dialogové okno Role:editor pro vytvoření nové role – v metodě actionEditor() si nastavuji do payloadu data k otevření formuláře
  3. V dialogu je formulář, který zpracovávám ajaxově
  4. 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');
  5. 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)

akadlec
Člen | 1326
+
0
-

střílím od boku ale co takhle v tom listu jinak generovat ty url? přidat tam i action nejen signal?