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.