Component->lookup preskočí nadradený komponent v prvej úrovni

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

Zdravím,

všimol som si, že Nette\ComponentModel\Component->lookup vždy preskočí parenta v prvej úrovni:

	public function lookup($type, $need = TRUE)
	{
		if (!isset($this->monitors[$type])) { // not monitored or not processed yet
			$obj = $this->parent;
			//...
			while ($obj !== NULL) {
				$parent = $obj->getParent();
				if ($type ? $obj instanceof $type : $parent === NULL) {
					break;
				}
				//...

Je to tak v 2.3 aj 2.4. Vo verzii, z ktorej upgradujem (0.9) to podľa mňa fungovalo správne:

	public function lookup($type, $need = TRUE)
	{
		//...
		if (!isset($this->monitors[$type])) { // not monitored or not processed yet
			$obj = $this->parent;
			//...
			while ($obj !== NULL) {
				if ($obj instanceof $type) break;
				//...
				$obj = $obj->getParent();
				if ($obj === $this) $obj = NULL; // prevent cycling
			}
			//...

Ak to nie je bug, aký je v tom zámer?

Ďakujem
viktorc

David Matějka
Moderator | 6445
+
0
-

nepovedlo se mi to nasimulovat. a kod dle me vypada v poradku. muzes ukazat priklad, ktery nefunguje?

viktorc
Člen | 21
+
0
-

Zdravím,

ospravedlňujem sa, moja chyba. Zmiatlo ma to getParent na začiatku loopu, lenže výsledok sa nepriradí do $obj hneď, ale až po porovnaní s hľadaným typom, takže je to v poriadku.

Ďakujem