AJAXový „redirect“ / „refresh“ samotné komponenty

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

Netušíte jak v PHP pustit obnovení komponenty vyvolané z ní samé?
Komponenta obsahuje formulář dvojí podoby, který se odesílá AJAXově.
Při zpracování POSTu se formulář sestaví do původní podoby, aby správně přijala a zvalidovala data.
Následuje propis do DB.
Pak bych ale potřeboval celou komponentu nějak vyresetovat, aby se formulář sestavil v nové (zcela odlišné) podobě. Nebo celý request začít zpracovávat nanovo.
Použitím $this->redirect(‚this‘); refreshnu celou stránku, což je ale zbytečné.

Nabízí se mi tři teoretická řešení:
1) V rámci stejné requestu zahodit vytvořenou komponentu a vytvořit ji od začátku
2) V rámci stejného requestu zavolat v PHP „AJAX subrequest“, který vrátí odpověď místo původního
3) Vrátit odpověď prohlížeči, kde bude (JS) pokyn k dalšímu AJAX requestu

Děkuji za případné podněty

Jan Endel
Člen | 1016
+
0
-

v handle zavolat:

$this->invalidateControl();

a vložit komponentu do snippetu
?

Editoval pilec (13. 3. 2012 16:13)

mlha
Člen | 58
+
0
-

pilec napsal(a):

v handle zavolat:

$this->invalidateControl();

a vložit komponentu do snippetu
?

Komponenta už invalidovaná je, protože přijala submit svého formuláře.

Editoval mlha (12. 4. 2012 8:09)

mlha
Člen | 58
+
0
-

Potřeboval bych nějak znovu pustit její createComponent s jiným signálem v rámci stejného AJAX requestu.

mlha
Člen | 58
+
0
-

Existuje v Nette nějaký způsob, jak v rámci stejné requestu zahodit vytvořenou komponentu a vytvořit ji od začátku?
Po spracování signálu by se komponenta „vyčistila“ – tzn. odpojila od presenteru a na jejím místě by se vytvořila její nová instance.
Lze vůbec nějak odpojovat komponenty z presenteru?
Lze za běhu měnit signály?

Editoval mlha (17. 4. 2012 13:36)

mlha
Člen | 58
+
0
-

Našel jsem řešení mého problému. Upravil jsem „AJAX Nette Framework plugin for jQuery“ a používám standardní redirect. Takže to vyhrála varianta 3).

úprava:

...
	if (payload.redirect) {
		//window.location.href = payload.redirect;
		$.post($.nette.href = payload.redirect, $.nette.success);
		return;
	}
...

Děkuji za spolupráci.
St.

Editoval mlha (15. 5. 2012 21:47)