Settery FormContainerů pro nastavení všech potomků

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

V poslední době hodně pracuji s formuláři a docela mi chybí tahle featurka: FormContainer by mohl umět setovací metody, které mají všechny controly společné (např. disabled, class, style atp.) a nastavil by všem svým potomkům setovaný atribut. Implementace by měla být triviální, asi by postačila iterace přes všechny getControls().

Jan Tvrdík
Nette guru | 2595
+
0
-

Co doplnění přes extension method?

Mikulas Dite
Člen | 756
+
0
-

Tak jasně že to jde, ale to by potom celý Nette framework mohl být metoda Object. ; )

Mikulas Dite
Člen | 756
+
0
-

Mohlo by se prosím do Nette dostat něco na tenhle způsob?

class FormContainer

/**
 * Disables or enables all child controls.
 * @param  bool
 * @return FormContainer	provides a fluent interface
 */
public function setDisabled($value = TRUE)
{
	foreach ($this->getControls() as $control) {
		$control->disabled = (bool) $value;
	}
	return $this;
}



/**
 * Sets attribute to all child controls.
 * @param  string	attribute name
 * @param  string|NULL	content to set, clear attribute if omitted or NULL
 * @return FormContainer	provides a fluent interface
 */
public function setAttribute($attribute, $value = NULL)
{
	foreach ($this->getControls() as $control) {
		if ($value !== NULL) {
			$control->getControlPrototype()->$attribute = $value;
		} else {
			unset($control->getControlPrototype()->$attribute);
		}
	}
	return $this;
}
redhead
Člen | 1313
+
0
-

problém bude, až přiřadíš nějaký nový control po volání jedné z těhle metod..

Mikulas Dite
Člen | 756
+
0
-

A jo, na to sem nemyslel – ale popravdě, byla by to asi stejně hloupá chyba jako třeba volání funkce po return. Tak dalo by se to i využít (no nedalo, protože by to bylo až moc WTF). Dobře, asi se z toho stane už asi desátá věc, kterou si do Nette budu doplňovat ručně…

Honza Kuchař
Člen | 1662
+
0
-

stejne mi to pripada uzitecne.