UIMacros::renderSnippets – test na \Nette\Application\UI\Control

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

Při řešení ajaxu u formulářu jsem narazil při vykreslování vlastního formuláře na tento problém (nevim z jakého důvodu to tam je, takže to za problém prozatím považuji).

Jde mi konkrétně o tuto část:

if ($control instanceof Nette\Application\UI\Control) {
			foreach ($control->getComponents(FALSE, 'Nette\Application\UI\Control') as $child) {
				if ($child->isControlInvalid()) {
					$child->snippetMode = TRUE;
					$child->render();
					$child->snippetMode = FALSE;
				}
			}
		}

Z jakého důvodu se testuje $control na Nette\…\Control a následně se i podle stejného pravidla vybírá, když o vykreslování se „stará“ Nette\Application\UI\IRenderable (obsahuje deklaraci isControlInvalid, invalidateControl a samotný název vlastne říká, že je určena k vykreslení)?

Domnívám se, že i když jde o Ajax, je čistě problém samotného objektu, jak se s tím popere, když už je definován jako IRenderable.

bojovyletoun
Člen | 667
+
0
-

Poprvé se testuje samotná komponenta, potom se z subkokomponent dané komponenty filtrují jen Nette\..\Control. Taky by mě princip zajímal. Control imp. rozhraní Irenderable a IpartiallyRenderable (které je shodné s tím předchozím, ale je zakomentované). Za další, jestli se v ` $child->render();` dá nějak vyřešit tento bug: https://github.com/…e/issues/160