Multiplier více než jeden parametr

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

Ahoj, snažím se vytvořit komponentu, která by v šabloně předávala 2 parametry.

Zkoušel jsem toto:

Presenter

protected function createComponentMagicEvent() {
        $presenter = $this;
        $control = new UI\Multiplier(function ($type, $team) use ($presenter) {
                    $control = new NextEvent($presenter->models, $presenter->values);
                    $control->setType($type);
                    $control->setTeam($team);
                    return $control;
                });
        return $control;
    }

Template:

{control magicEvent-5-7}

Ale hlástí mi to stále chybu: Component with name ‚7‘ does not exist
Nejspíš jsem to špatně pochopil, nebo někde dělám chybu, prosím vás o radu.

Díky Míra

mkoubik
Člen | 728
+
+1
-

To je tím, že $control->getComponent('magicEvent-5-7') je totéž co $control->getComponent('magicEvent')->getComponent('5')->getComponent('7'). Zkus si to oddělit něčím jiným a v Multiplieru použij explode().

Více o komponentách tady.

Miri
Člen | 117
+
0
-

To asi není zrovna nejšikovnější řešení. Jiným způsobem to nejde?

voda
Člen | 561
+
0
-

Můžeš použít Multiplier dvakrát:

protected function createComponentMagicEvent() {
	$presenter = $this;
	return new UI\Multiplier(function ($type) use ($presenter) {
		return new UI\Multiplier(function($team) use ($presenter, $type) {
			$control = new NextEvent($presenter->models, $presenter->values);
			$control->setType($type);
			$control->setTeam($team);
			return $control;
		});
	});
}
David Matějka
Moderator | 6445
+
0
-

nebo udelat vlastni multiplier, ktery bude posilat vic parametru – bude nutno prekryt i metodu getComponent

enumag
Člen | 2118
+
0
-

Multiplier nikde nepoužívám takže možná říkám blbost, ale nešlo by prostě poslat PR s úpravou multiplieru pro podporu více parametrů?

Vojtěch Dobeš
Gold Partner | 1316
+
+4
-

Primární podstatou Multiplieru je vytvoření více instancí komponenty se stejnou továrničkou, ne předávání parametrů z šablony. Pokud je třeba jej takto využít, vícenásobné vnoření Multiplieru je podle mě ideálním řešením. Pokud jsem ve zdrojácích nic nepřehlédnul, neměl by by být problém udělat jméno jako toto:

magicEvent-5+7

S továrničkou:

protected function createComponentMagicEvent()
{
	$presenter = $this;
	$control = new UI\Multiplier(function ($arg) use ($presenter) {
		list($type, $team) = explode('+', $arg);
		$control = new NextEvent($presenter->models, $presenter->values);
		$control->setType($type);
		$control->setTeam($team);
		return $control;
	});
	return $control;
}

Je ale třeba mít na paměti, že je to jen zneužití toho, jak Multiplier funguje :).