(re)storeRequest po AJAXovém dotazu

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

Dobrý den,

používám k plné spokojenosti NiftyGrid, ale narazil jsem na problém. Příklad grid s uživateli, kde jeden ze sloupců slouží k přepínání enabled/disabled, ajaxově, což funguje:

<?php
$this->addColumn('enabled', 'povolen')->setBooleanEditable()->setBooleanFilter()
		->setRenderer(function ($row) use ($presenter) {
				$img = \Nette\Utils\Html::el('img')->width(19)->height(19);

				$text = ($row->enabled == 1 ) ? 'ano' : 'ne';
				$img_src = ($row->enabled == 1 ) ? '/icons/enabled.png' : '/icons/disabled.png';

				$img->src($presenter->template->basePath . $img_src)
						->setText($text)->alt($text)->title($text);

				if ($presenter->user->isAllowed('users', 'changeActive')) {
					return \Nette\Utils\Html::el('a')
						->href($presenter->link('changeActive!', $row->id))
						->class('ajax')->add($img);
				} else {
					return $img;
				}
			});
?>

pak mám řádkovou akci na editaci, která směřuje na Presenter:action kde je formulář (storeRequest je takto mimo aby se pro každý řádek negeneroval nový backlink):

<?php
$presenterLinkName = $this->presenterLinkName;
$backlink = $presenter->storeRequest();
$this->addButton('edit')
	->setLink(function ($row) use ($presenter, $presenterLinkName, $backlink) {
		return $presenter->link($presenterLinkName.'edit', array($row->id, 'backlink'=>$backlink));
	})
	->setAjax(false)
	->setIcon('ui-icon-pencil')
	->setLabel('upravit záznam');
?>

Problém mám ale s tím backlinkem, když nejdříve ajaxově například vypnu uživatele a následně ho jdu upravit do formuláře, tak při návratu přes restoreRequest($backlink) je ten uživatel najednou zase zapnutý. Pokud restoreRequest odstraním a dojde na obyčejný redirect() tak je vše v pořádku.

Podezřívám tedy metodu storeRequest(), že mi uloží stav aplikace i s tím, že došlo ke spuštění handleru a při návratu ho zavolá znovu. Nebo jsem něco přehlédl, nebo špatně používám storeRequest()? Snažil jsem se o tom najít a přečíst všechno na tomto fóru.
Backlink mám persistentní ve všech presenterech a pracuje v pořádku.

Přikládám ještě pro jistotu handler:

<?php
public function handleChangeActive($id) {
	if (!$this->user->isAllowed('users', 'change-active')) {
		$this->accessDenied();
	} else {
		$user = $this->model->get($id);

		if (!$user) {
			$this->flashMessage('Zadaný uživatel neexistuje', 'error');
		} elseif ($user->roles->name == 'root' && $user->enabled && $this->isLastRoot()) {
			$this[$this->gridName]->flashMessage('Nelze zakázat jediného zbývajícího roota', 'error');
		} else {
			$user->enabled = !$user->enabled;

			if ($user->update() === false) {
				$this[$this->gridName]->flashMessage('Chyba při změně záznamu, zkuste to prosím znovu.', 'error');
			}

			if ($this->isAjax()) {
				$this[$this->gridName]->invalidateControl();
			} else {
				$this->redirect('list');
			}
		}
	}
	if ($this->isAjax()) {
		$this[$this->gridName]->invalidateControl('flashes');
	}
}
?>

P.S. Nette 2.0.10 stabilní, PHP 5.3.10