Multiselect – addCondition pro jednu z variant

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

Ahoj, při použití multiselectu se snažím zobrazit přes toggle další formulářové prvky. Pokud mám vybraný pouze jeden konkrétní option v selectu, tak to funguje, ale při vícenásobném výběru to netoggluje. Podmínku v addCondition mám EQUAL, tzn. to bere všechny hodnoty z multiselectu a pokud to matchuje pouze v jedné, tak to funguje, jinak ne. Lze to nahradit něčím jako Form::CONTAINS, nebo na to existuje nějaký jednoduchý regulár?

Příklad, kde to netoggluje při vícenásobném výběru z multiselectu:

<?php

$form->addMultiSelect('roles', 'messages.formLabels.roles')
	->setItems($this->authenticator->getRoles(), FALSE)
	->addCondition(Form::EQUAL, 'partner')
		->toggle('partnerDetailsGroup');
$form->addGroup('messages.formGroups.partnerDetails')->setOption('id', 'partnerDetailsGroup');

?>
ali
Člen | 342
+
0
-

Zkus tento zapis:

->addCondition(Form::EQUAL, ['partner', 'partnerka'])
potapnik
Člen | 127
+
0
-

Díky, ale jde mi spíš o to, aby pokaždé, když vyberu ‚partner‘, byla podmínka splněna, tj. tohle fungovat nebude…

duke
Člen | 650
+
+2
-

Můžeš na to použít vlastní validační pravidlo:

$form->addMultiSelect('roles', 'messages.formLabels.roles')
    ->setItems($this->authenticator->getRoles(), FALSE)
    ->addCondition('MyApp\CustomValidators::partnerInRoles')
        ->toggle('partnerDetailsGroup');

Pak jen napsat onen validátor (viz dokumentace). V PHP to není problém, v JS to má vypadat zhruba takto (netestováno):

Nette.validators.MyAppCustomValidators_partnerInRoles = function(elem, args, val) {
	return jQuery.inArray("partner", val);
}

Editoval duke (25. 9. 2016 20:09)

potapnik
Člen | 127
+
0
-

Díky moc! Takovejch validátorů jsem napsal a u tohohle mě to vůbec nenapadlo :-/