Získávání komponent z ComponentContaineru
- romansklenar
- Člen | 655
Mějme ComponentContainer
naplněný komponentama přes
$this->addComponent($component, $name);
Debug::dump($this->components);
vypíše:
object(RecursiveComponentIterator) (3) {
"colName1" => object(DataGridColumn) (11) {
...
}
"colName2" => object(DataGridColumn) (11) {
...
}
"colName3" => object(DataGridColumn) (11) {
...
}
}
Takže container je naplněn třema componentama DataGridColumn
(potomkem Component
), ještě zkontroluju jednou přes
getComponents().
Debug::dump($this->getComponents(FALSE));
vypíše:
object(RecursiveComponentIterator) (3) {
"colName1" => object(DataGridColumn) (11) {
...
}
"colName2" => object(DataGridColumn) (11) {
...
}
"colName3" => object(DataGridColumn) (11) {
...
}
}
Což sedí, když chci ale získat DataGridColumn
-y přes
určení filtru pomocí názvu třídy
Debug::dump($this->getComponents(FALSE, 'DataGridColumn'));
dostanu kůlové…
object(InstanceFilterIterator) (1) {
"type" private => string(14) "DataGridColumn"
}
Je v tom něco opomenutého? Protože na formulářích to funguje bezvadně.
EDIT: při posledním volání doběhne kód zde
kde do konstruktoru InstanceFilterIterator
-u vstupují oba
parametry se správnýma hodnotama, ven už však vyleze to co je na posledním
dumpu (prázdný InstanceFilterIterator
) – metoda InstanceFilterIterator::accept()
neproběhne.
- romansklenar
- Člen | 655
Jen si doplním pro sebe, že nejde použít ani count
:
count
naFilterIterator
– vrací za všech okolností 1count
naFilterIterator::getInnerIterator
– vrací zase počet všech prvků
- David Grudl
- Nette Core | 8284
Mělo by fungovat
count(iterator_to_array($this->getComponents(FALSE, 'DataGridColumn')))
ale pravda, count() by mohlo vyhodit výjimku
NotSupportedException
(ovšem je to spíš na tvůrce SPL)