Replikator se select boxem

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

Ahoj, mám problém s předáním nachystaného pole pro select do dynamického kontejneru.
Formulář vypadá takto:

        $form = new Nette\Application\UI\Form;

        $added = $this->demoParams->findAll()->where('demos_id', $this->demoId);
        $paraArray = array();
        $dependArray = array();
        foreach ($added as $para) {
            $paraArray[$para->id] = $para->name;
            $vals = $this->paramValues->findAll()->where('parameters_id', $para->id);
            foreach ($vals as $val) {
                $dependArray[$para->name][$val->id] = $val->value;
            }
        }

        $params = $form->addDynamic('params', function (Container $para) {
            $para->addSelect('parameters_id', 'Parametr:', $paraArray);
            $para->addSelect('parameter_values_id', 'Závislý na:', $dependArray);

            $para->addSubmit('remove', '- smazat závislost -')
                ->setValidationScope(FALSE)
                ->addRemoveOnClick(); // metodu vytváří replicator
        }, 0);

U prvního selectu mi to selže, protože dynamický kontejner nevidí předem nachystané pole. Error:

Undefined variable: paraArray

Zkusil sem tedy vytváření polí přesunout dovnitř dynamického kontejneru. Ale tam se mění objekt a kontext, takže Error:

Using $this when not in object context

Neporadí někdo jak to zprovoznit?

Editoval Nich (21. 4. 2013 15:40)

Tomáš Votruba
Moderator | 1114
+
0
-

Ahoj, zřejmě hledáš use, přes které dostaneš proměnné do anonymní fce, tedy:

$params = $form->addDynamic('params', function (Container $para) use ($paraArray, $dependArray) {
// ...

Tady máš jednoduché vysvětlení

Nich
Člen | 49
+
0
-

Super, funguje. Moc dík za pomoc.